当前位置: 首页 > 知识库问答 >
问题:

面向顺序访问的Cosmos数据库分区密钥和查询设计

裴楚青
2023-03-14

如果我们只使用CustomerID作为分区键,我们最终将超过逻辑分区的10GB限制,如果我们使用Eventid,那么查询将变得低效(将导致跨分区查询和高RU使用率,这是我们希望避免的)。

另一个想法是将文档分组为块。即PartitionKey=int(EventId/PartitionSize)。这将导致所有客户机访问最新的分区,这可能会导致性能差和节流。

如果我们使用CustomerIDint(EventId/PartitionSize)的组合PartitionKey,那么我不清楚如何避免跨分区查询来检索正确的文档集。

澄清几点:

  • 客户端将通过指定CustomerID的列表、它们收到的最后一个Eventid以及要检索的最大记录数来访问事件。
  • 因此,单独使用EventId不会很好地执行,因为它会导致跨分区查询(即whereevent>lasteventid)。
  • 系统可能会以每天1GB的速度,以15分钟的速度递增。
  • 很难知道读取量会是多少,但我猜可能会适中,可能有几千个客户机定期轮询API。

共有1个答案

姜飞飙
2023-03-14

所以首先,逻辑分区的大小限制现在已经增加到20GB,请看这里。

您也可以使用EventID作为分区,因为逻辑分区的大小以GB为单位有限制,但逻辑分区的数量没有限制。所以使用EventID很好,如果使用EventID查询,您将得到一个点到点的读取,这是非常快的。现在您提到使用这种方式,您将不得不执行跨分区查询,您能解释一下如何执行吗?

但有几件事要记住,Cosmos DB并不是真正用来存储这种基于日志的数据,因为它将所有东西都存储在固态硬盘中,所以请计算您的1文档大小,以及您在一秒钟内需要存储多少,然后在一天内存储多少,再到在一个月内存储多少。完成后,可以使用TTL从Cosmos中删除,对于长期存储,可以将其存储在Azure BLOB存储中,对于快速检索,可以使用Azure Search在搜索查询中使用CustomerID和EventID查询BLOB中的数据。

 类似资料:
  • 我正在学习Cassandra,并有一个关于分区/集群键的问题。 我有一个表,存储数据的股份,如行业的分支,最近6/12个月的业绩,名称等。 该表如下所示: 多谢了,伙计们

  • 现在,如果我再次打开我的应用程序,并通过Azure.iOS框架查询收集文档,它会返回我刚才保存的结果。这让我感到有点莫名其妙。我是不是错过了应用程序中的某些操作,还是所有的MongoDB工具都无法列出文档?该框架的文档相当稀疏,因此希望提供任何帮助。

  • 向表中插入数据,记录中有一个字段涉及到当前记录是当前租户下第几个插入的,也就是顺序码,如何维护这个顺序码,在保证线程安全的情况下,不同租户的记录都保存在同一张表下, 目前的做法是插入数据的时候不插入该字段,获取该表记录列表的时候按照插入时间排序,然后判断对应字段是否为空,如果为空则插入

  • 是否有一种方法可以使用Delphi访问Azure密钥库?我可以使用柏林的data.cloud.azureapi单元访问数据库和blob存储,但想从密钥库中获取数据库连接字符串,但似乎找不到任何用于此操作的代码。

  • 我有几个关于Azure Key Vault的问题,我需要一些技术帮助:链接https://docs.microsoft.com/en-us/Azure/key-vault/general/overview指出,“机密和密钥由Azure保护,使用行业标准算法、密钥长度和硬件安全模块(HSMs)。使用的HSMs经过联邦信息处理标准(FIPS)140-2级验证”。 我想确认这是否适用于秘密,就像适用于密