Azure cosmosdb 如何为CosmosDB id字段选择一个好的值集?

Azure cosmosdb 如何为CosmosDB id字段选择一个好的值集?,azure-cosmosdb,Azure Cosmosdb,,属性id在Azure CosmosDB文档中是特殊的,因为它必须始终设置,并且每个分区具有唯一的值。此外,它对其内容还有其他限制: 以下字符受限制,不能在Id中使用 属性:“/”、“\”、“?”、“#” 显然,此字段是文档“键”之一(除了\u rid)并以某种方式用于内部管道。除上述限制外,目前尚不清楚该密钥在内部使用的确切方式,更重要的是对从业人员而言,哪些值构成了技术上比其他值更好的ID? Wild guess 1:例如,在一些数据库世界中,人们更喜欢短主键值,因为主键将包含在索引项中,短

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

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

显然,此字段是文档“键”之一(除了
\u rid
)并以某种方式用于内部管道。除上述限制外,目前尚不清楚该密钥在内部使用的确切方式,更重要的是对从业人员而言,哪些值构成了技术上比其他值更好的ID?

Wild guess 1:例如,在一些数据库世界中,人们更喜欢短主键值,因为主键将包含在索引项中,短键将允许更紧凑的索引用于存储和查找。除了一次性存储成本外,id字段长度还会起作用吗

Wild guess 2:在某些系统中,如果在名称中避免使用常见前缀(即),甚至建议添加一个小的随机哈希作为前缀,则可以获得更好的吞吐量。cosmosDB是否关心id前缀的相似性

<还有什么值得考虑的吗?


编辑:澄清,我对cosmosDB服务器存储/执行端的好处感兴趣,前提是我的数据模型仍在设计中,并且/或者有多个键可供数据设计者选择。

首先,让我们澄清一些问题。
id
属性不是唯一的。您的收藏可以有多个具有完全相同的
id
的文档。
id
仅在它自己的逻辑分区中是唯一的

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

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

要设置的一个好值是此集合中承载的实体的id。这样,您可以使用实体的id快速高效地读取