Azure Cosmos DB分区密钥-主键可接受吗?

Azure Cosmos DB分区密钥-主键可接受吗?,azure,azure-cosmosdb,database-partitioning,Azure,Azure Cosmosdb,Database Partitioning,我们的Azure Cosmos DB集合已经足够大,需要一个分区密钥。在阅读相关文章时,我得到的印象是,最好的分区键是提供均匀分布和更高基数的分区键。微软对此进行了讨论 使用主键作为分区键可以提供均匀分布,但基数仅为1。如果这是我唯一的选择,这是件坏事吗?前面提到的文章给出了一些建议,似乎表明在这些实例中,主键应该用作分区键。在Azure Cosmos DB中,分区是逻辑的,而不是物理的。因此,这不会导致每个文档都放在自己的磁盘上,但似乎会导致索引膨胀 使用主键作为分区键是常见的做法吗?它有什么

我们的Azure Cosmos DB集合已经足够大,需要一个分区密钥。在阅读相关文章时,我得到的印象是,最好的分区键是提供均匀分布和更高基数的分区键。微软对此进行了讨论

使用主键作为分区键可以提供均匀分布,但基数仅为1。如果这是我唯一的选择,这是件坏事吗?前面提到的文章给出了一些建议,似乎表明在这些实例中,主键应该用作分区键。在Azure Cosmos DB中,分区是逻辑的,而不是物理的。因此,这不会导致每个文档都放在自己的磁盘上,但似乎会导致索引膨胀


使用主键作为分区键是常见的做法吗?它有什么坏处吗?

没有,它没有坏处。努力使分区键具有高基数。不要担心索引或物理分区等


您可以有数百万个分区键和10个物理分区。物理分区由CosmosDB在幕后创建。永远不要担心物理分区

实际上,分区键的选择是一个值得反复权衡的问题。因为选择主键作为分区键是您唯一的选择,所以我只讨论一些可能的负面因素作为参考

就性能而言,如果查询的字段不是分区键,那么查询肯定会通过跨分区来降低查询性能。可以说,如果数据量很小,就不会有多大影响

就成本而言,cosmos db主要是通过存储空间和RUs消耗来收费的。正如您所说,选择主键作为分区键将导致更多的索引存储。如果大部分查询是跨分区的,那么也会导致更多的RU消耗

在使用存储过程、触发器或UDF方面,不能通过存储过程和触发器使用跨分区事务。因为它们是分区的,所以在使用它们时需要指定分区键(基数仅为1)

只需注意,若创建了分区键,以后就不能删除或修改它。所以在你选择并确保你做数据备份之前考虑它。
更多详细信息,请参阅。

您可以说主键是分区键最安全、可能也是最合适的选择


它保证了值的唯一性,而不是唯一键,这是实现的唯一方法。分发将是均匀的,因为主键将是您的分区键,所以您可以使用它通过读取而不是查询来检索文档,这降低了操作速度和成本。

否。逻辑分区越多越好。这有助于数据均匀分布。@RafatSarosh这难道不意味着按PK以外的字段进行查询会有更高的成本吗?