【问题标题】:How to choose a good value set for CosmosDB id field?如何为 CosmosDB id 字段选择一个好的值集?
【发布时间】:2019-01-11 17:06:10
【问题描述】:

According to docs,属性 id 在 Azure CosmosDB 文档中是特殊的,因为它必须始终设置并且每个分区具有唯一值。它的内容也有额外的限制:

以下字符受限,不能在Id中使用 属性:'/'、'\'、'?'、'#'

显然,该字段是文档“键”之一(除了_rid),并以某种方式用于内部管道。除了上述限制之外,目前尚不清楚这个密钥在内部是如何使用的,更重要的是对于从业者来说,哪些值在技术上比其他值构成更好的 id?

猜测 1: 例如,在某些 DB 世界中,人们会更喜欢短主键值,因为 PK 将包含在索引条目中,而较短的键将允许更紧凑的索引用于存储和抬头。除了一次性存储成本之外,id 字段长度是否重要?

猜测 2: 在某些系统中,如果在名称中避免使用公共前缀(即azure storage container/blob names),甚至建议添加一个小的随机散列作为前缀,则可以实现更好的吞吐量。 cosmosDB 是否关心 id 前缀的相似性?

还有什么值得考虑的吗?

编辑:澄清一下,我对 cosmosDB 服务器存储/执行方面的好处感兴趣,前提是我的数据模型仍在设计中和/或有多个可用的键可供数据设计人员选择来自。

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    首先让我们澄清一些事情。 id 属性不是唯一的。您的集合可以有多个文档,它们具有完全相同的idid 仅在其自己的逻辑分区内是唯一的。

    也就是说,根据我们从文档和谈话中了解到的所有编译信息,您选择使用什么值并不重要。它是一个字符串,Cosmos DB 会将其视为字符串,但它在内部也被视为“主键”,因此存在限制,例如按其排序。

    重要的是您的消费应用程序的业务逻辑。 id 扮演着双重角色,既是 CosmosDB 属性,也是您的属性。你可以设置它。这是您将用于直接读取数据库的值。如果您使用任何其他值,则不再是读取。这是一个查询。这使得它更昂贵和更慢。

    一个好的设置值是该集合中托管的实体的 ID。这样您就可以使用实体的 id 快速高效地读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 2023-02-08
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多