我们的Azure Cosmos DB集合已经足够大,需要分区键。通过阅读有关内容,我得到最好的分区键是可以提供均匀分布和更高基数的键。微软的This article对此进行了讨论。
使用主键作为分区键可以提供均匀的分配,但是基数仅为1。如果这是我唯一的选择,这是一件坏事吗?前面提到的文章给出了一些examples,似乎表明在这些情况下应将主键用作分区键。对于Azure Cosmos DB,分区是逻辑的,而不是物理的。因此,这不会导致将每个文档都放在自己的磁盘上,但似乎可能导致索引过大。
使用主键作为分区键是常见的做法吗?有什么缺点吗?
答案 0 :(得分:2)
不,它没有缺点。力争拥有高基数的分区键。不用担心索引或物理分区等。
您可以具有数百万个分区键和10个物理分区。物理分区是由CosmosDB在后台创建的。您永远不必担心物理分区。
答案 1 :(得分:1)
实际上,分区键的选择是一个值得反复权衡的问题。由于选择主键作为分区键是您唯一的选择,所以我只讨论一些可能的负面内容作为您的参考。
在性能方面,如果查询的字段不是分区键,则查询肯定会通过跨分区而降低查询性能,当然,如果数据量很小,则不会有太大作用。
就成本而言,cosmos db主要由存储空间和RU消耗来收费。正如您所说,选择主键作为分区键将导致更多的索引存储。如果大多数查询是跨分区的,则还会导致更多的RU消耗。
就使用存储过程,触发器或UDF而言,您不能通过存储过程和触发器使用跨分区事务。因为然后进行了分区,所以在使用它们时需要指定分区键(基数仅为1)。
请注意,如果创建了分区键,则以后将无法删除或修改它。因此,在选择之前先考虑一下,并确保进行数据备份。
更多详情,请参阅official doc。
希望它对您有帮助。
答案 2 :(得分:0)
您可以说主键是分区键最安全,也是最合适的选择。
除了唯一键之外,它保证值的唯一性是唯一的实现方法。分布将是均匀的,并且因为主键将是您的分区键,所以您可以使用它来读取文档而不是查询来检索文档,从而降低了操作速度和成本。