According to docs,属性id
在Azure CosmosDB文档中是特殊的,因为必须始终对其进行设置并具有唯一的值。它还对其内容有其他限制:
以下字符受限制,不能在ID中使用 属性:“ /”,“ \”,“?”,“#”
很明显,此字段是文档“键”之一(除了_rid
之外),并以某种方式用于内部管道。除了上述限制外,尚不清楚此密钥在内部使用的准确程度如何,并且对从业人员更重要。从技术上讲,哪些值比其他值更好?
猜测1:例如,在某些数据库世界中,人们更喜欢短主键值,因为PK将包含在索引条目中,而较短的键将允许更紧凑的索引用于存储和抬头。 id字段的长度除了一次性存储成本外,还重要吗?
猜测2:在某些系统中,如果名称中避免使用通用前缀(例如azure storage container/blob names),甚至建议添加一个小的随机哈希作为前缀,则可以实现更高的吞吐量。 cosmosDB是否关心id前缀的相似性?
还有什么应该考虑的吗?
编辑:澄清,我对cosmosDB服务器存储/执行方面的好处很感兴趣,但前提是我的数据模型仍在设计中和/或有多个键可供数据设计人员选择来自。
答案 0 :(得分:0)
首先让我们清除一些东西。 id
属性不是唯一的。您的收藏夹可以包含多个具有完全相同的id
的文档。 id
在其自己的逻辑分区中唯一。
这就是说,基于我们从文档中了解并讨论的所有已编译信息,选择要使用的值实际上并不重要。它是一个字符串,Cosmos DB将按原样对待它,但在内部也将其视为“主键”,因此存在一些限制,例如按其排序。
重要的是您使用的应用程序的业务逻辑。 id
既是CosmosDB属性,又是您的属性,具有双重作用。您可以进行设置。这是将用于直接读取数据库的值。如果使用其他任何值,则不再是读取值。这是一个查询。这使得它更昂贵,更慢。
要设置的一个很好的值是此集合中托管的实体的ID。这样,您可以使用实体的ID来快速有效地读取内容。