DocumentDB:如何在没有超时的情况下运行查询

时间:2016-07-13 14:59:57

标签: azure stored-procedures timeout azure-sql-database azure-cosmosdb

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

当前情况:

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

期望

在没有超时的情况下对所有记录运行脚本。

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

任何人都可以告诉我如何实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

TL;博士;继续调用sproc,并且来回传递查询延续令牌。

一些想法:

  1. 对于集合而言,没有容量可以让您在一次调用sproc时完成所有百万次。

  2. Sprocs在单个副本上独立运行。这意味着它们可以是事务性的,但它们的使用将比可以使用所有副本来满足请求的常规查询具有更低的吞吐量,因此除非您需要它在sproc中,否则我建议使用直接查询需要与写入进行事务处理。即使这样,有了一百万个文档,您的查询也会最大化,您将不得不再次使用延续令牌运行查询。

  3. 如果你必须使用一个sproc ...因为你可能已经知道,因为你一次做了100个事情,每个查询返回一个延续令牌。实际上,您可以将其添加到超时时从sproc发回的包中。然后你可以将它传回另一个对同一个sproc的调用并写下你的sproc来从你离开的地方开始。只要您按照documentdb-utils,node.js的this pattern for writing your sprocs库就会自动重新调用sproc,直到完成为止。如果您正在使用node.js,您可以使用它(但它尚未升级以支持分区集合),或者您可以在您使用的任何平台上编写等效项。