在documentDB分区集合中,您需要知道partitionKey值才能对其执行存储过程。但是,为了能够执行类似计数存储过程的操作,它必须跨所有分区工作或者为每个分区执行。
这意味着无法执行存储过程以生成分区键列表(AFAIK)。运行查询以返回所有文档中的partitionkey的每个值,然后对客户端进行重复数据删除是一种非常不优雅,蛮力,昂贵的操作。你不能SELECT DISTINCT
。
如何生成分区键列表,而不采用SELECT partitionkey FROM docs
方法?
答案 0 :(得分:2)
我知道要获得分区集合的精确计数的最有效方法是使用这样的查询:
SELECT VALUE 1 FROM docs
然后对返回的结果进行计数/求和,或者更好,读取x-ms-item-count
标题。
我还没有尝试过,但如果您想要大概数量的文档,我想您可以使用从任何请求中返回的x-ms-resource-usage
。 documentsSize
值除以平均文档大小(您必须以某种方式计算,可能是采样?)将为您提供近似计数。我假设这些标题对于分区集合是可用且准确的,因此您可能必须尝试这一点以确保。
我不知道其中一个,但如果有某种方法可以检索当前的分区配置(表显示哪些哈希键值范围转到哪个分区),则可能会进行手动扇出sproc电话。但是,如果它们的实现类似于我的实现,则在重新平衡(添加或删除分区)期间的操作是棘手的,并且您必须防止在检索它之间的配置发生变化与发布sproc时的配置之间的变化调用。我宁愿我的设计不依赖于了解当前的分区配置。