在azure cosmos DB中可以有一个非主键作为分区键吗?

时间:2018-12-05 12:01:23

标签: azure-cosmosdb azure-cosmosdb-sqlapi

我正在cosmos db中创建一个可能超过10GB的集合。集合没有任何主键。将我经常查询的非主键字段用作分区键是个好主意吗?

1 个答案:

答案 0 :(得分:0)

  

使非主键字段成为我的好主意吗   频繁查询作为分区键?

实际上,分区键的选择是一个值得反复权衡的问题。最好的分区密钥是提供均匀分布和更高基数的密钥。

由于选择作为您经常查询的非主键是您现在的选择,所以我只讨论一些可能的积极和消极的事情作为您的参考。

首先,我们可以说主键是分区键最安全,也是最合适的选择。

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

就性能而言,如果您的“频繁查询”字段不是分区键,那么您的查询肯定会通过跨分区而降低查询性能。当然,如果数据量很大,将会有很大的效果。

就成本而言,cosmos db主要由存储空间和RU消耗来收费。如您所说,选择非主键作为分区键将导致较少的索引存储。如果大多数查询不是跨分区的,则还可以节省RU消耗。

就使用存储过程,触发器或UDF而言,您不能通过存储过程和触发器使用跨分区事务。因为然后进行了分区,所以在使用它们时需要指定分区键(基数仅为1)。

请注意,如果创建了分区键,则以后将无法删除或修改它。因此,在选择之前先考虑一下,并确保进行数据备份。

更多详情,请参阅official doc