DocumentDB:列出使用的分区键

时间:2016-09-20 10:47:53

标签: c# azure-cosmosdb

在documentDB分区集合中,您需要知道partitionKey值才能对其执行存储过程。但是,为了能够执行类似计数存储过程的操作,它必须跨所有分区工作或者为每个分区执行。

这意味着无法执行存储过程以生成分区键列表(AFAIK)。运行查询以返回所有文档中的partitionkey的每个值,然后对客户端进行重复数据删除是一种非常不优雅,蛮力,昂贵的操作。你不能SELECT DISTINCT

如何生成分区键列表,而不采用SELECT partitionkey FROM docs方法?

1 个答案:

答案 0 :(得分:2)

我知道要获得分区集合的精确计数的最有效方法是使用这样的查询:

SELECT VALUE 1 FROM docs

然后对返回的结果进行计数/求和,或者更好,读取x-ms-item-count标题。

我还没有尝试过,但如果您想要大概数量的文档,我想您可以使用从任何请求中返回的x-ms-resource-usagedocumentsSize值除以平均文档大小(您必须以某种方式计算,可能是采样?)将为您提供近似计数。我假设这些标题对于分区集合是可用且准确的,因此您可能必须尝试这一点以确保。

我不知道其中一个,但如果有某种方法可以检索当前的分区配置(表显示哪些哈希键值范围转到哪个分区),则可能会进行手动扇出sproc电话。但是,如果它们的实现类似于我的实现,则在重新平衡(添加或删除分区)期间的操作是棘手的,并且您必须防止在检索它之间的配置发生变化与发布sproc时的配置之间的变化调用。我宁愿我的设计不依赖于了解当前的分区配置。