DocumentDB:如何 运行 查询而不会超时

DocumentDB: How to run a query without timing out

我是 documentDb 的新手。我编写了一个存储过程来检查所有记录并在特定情况下更新它们。

当前场景:

它会一次 运行 100 条记录,然后更新它们,然后在 运行 几次(一次获取 100 条记录并更新)后超时。

预期

运行脚本对所有记录无超时。

该文档有近一百万条记录。因此,运行手动多次使用同一个脚本并不是我想要的方式。

任何人都可以告诉我如何实现吗?

tl;博士;使用来回传递的查询延续令牌继续调用存储过程。

一些想法:

  1. 集合的 RU 容量无法让您一次调用 sproc 完成所有百万次操作。

  2. Sprocs 运行 在单个副本上隔离。这意味着它们可以是事务性的,但它们的使用将比可以使用所有副本来满足请求的常规查询具有更低的吞吐量,因此除非您需要它在存储过程中,否则我建议使用直接查询来读取不需要与写入进行事务处理。即使那样,对于一百万个文档,您的查询也会达到最大值,您将不得不 运行 使用延续标记再次查询。

  3. 如果您必须使用存储过程...您可能已经意识到,因为您一次完成了 100 个操作,每个查询 returns 一个延续标记。实际上,您可以将其添加到您在存储过程超时时发回的包中。然后您可以将其传递回对同一个存储过程的另一个调用,并编写您的存储过程以从您离开的地方继续。 documentdb-utils library for node.js automatically re-calls the sproc until done as long as you follow this pattern for writing your sprocs。如果您正在使用 node.js,您可以使用它(但它尚未升级以支持分区集合)或者您可以在您使用的任何平台上编写等价物。