1

我是documentDb的新手。我编写了一个存储过程来检查所有记录并在某些情况下更新它们。DocumentDB:如何在没有超时的情况下运行查询

目前的情况:

这将同时运行100条记录,更新它们并运行几次后,其超时(在时间和更新服用100条记录)。

期望

运行不会超时上的所有记录的脚本。

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

任何人都可以请告知我怎样才能做到这一点?

+0

当你写下“文件接近一百万条记录”时,你的意思是“收藏已接近一百万份文件”吗? –

回答

1

tl; dr;继续调用存储查询连续令牌的sproc来回传递。

的一点想法:

  1. 没有对集合,让你做的所有万元一个调用存储过程的能力RU的。

  2. 存储过程中隔离在单一副本运行。这意味着它们可以是事务性的,但是它们的使用将比可以使用所有副本来满足请求的常规查询具有更低的吞吐量,所以除非您需要将它置于sproc中,否则我建议使用直接查询需要与写入交易。即使那样,有一百万个文档,您的查询将最大化,您将不得不再次使用连续令牌运行查询。

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

+0

嗨拉里。 我觉得我没有正确地解释它,我没有选择100只记录在一个时间,但是当我试图拿起所有的记录,它只是拿起100在同一时间。对直接更新查询是否没有时间限制? – TheDeveloper

+0

默认'responseOptions.pageSize' 100。您必须将其设置为-1,如果你想它,试图得到尽可能多的,但我建议不要在一个存储过程(但它在直接查询的罚款)。我通常将它设置为1000或10,000。这允许sproc在累积超过执行时间限制时进行渐进式处理并记忆它。我推荐的方法指望它不适合非常大的结果集。这里是一个设置pageSize的例子,如果它超时,它可以重新启动:https://github.com/lmaccherone/documentdb-utils/blob/master/sprocs/countDocuments.coffee –

相关问题