2016-09-20 57 views
1

在documentDB分区集合中,您需要知道partitionKey值才能够对其执行存储过程。但是,为了能够执行诸如计数存储过程之类的操作,它必须在所有分区上工作或为每个分区执行。DocumentDB:列出使用的分区键

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

如何才能产生分区键列表,而不诉诸SELECT partitionkey FROM docs方法?

回答

1

我知道的工作再上一个分区的集合精确计数的最有效的方法是使用这样的查询:

SELECT VALUE 1 FROM docs 

再算上/总和退还或过更好的结果,请阅读x-ms-item-count标题。

我还没有尝试过,但如果你想要的文件的大致数量,我想你可以使用来自任何请求回x-ms-resource-usagedocumentsSize值除以平均文档大小(您必须以某种方式计算,可能是采样?)会给您一个大致的计数。我假设这些标题对于分区集合是可用且准确的,因此您可能必须尝试确定。

我不知道其中的一个,但是如果有一些方法可以检索当前的分区配置(表中显示了什么范围的散列键值到什么分区),那么可能会做一个手动风扇 - 脱出sproc调用。但是,如果它们的实现类似于我的实现,则在重新平衡期间(添加或删除分区时)的操作是棘手的,您必须防止配置在检索时与检出sproc时相比发生变化调用。我宁愿我的设计不依赖于了解当前的分区配置。