Azure DocumentDb存储过程中超过5秒执行时间限制时会发生什么

时间:2016-01-07 13:12:56

标签: azure-cosmosdb

我有一个读取操作,它从DocumentDb集合中读取大量记录,并且在执行时它将运行很长时间。我正在编写一个存储过程来将该查询移动到服务器端。据我所知,documentdb存储过程的执行上限为5秒。我想知道的是,在读取操作中,当查询执行达到该时间限制时会发生什么。我可以在一段时间后添加某种重试逻辑来继续吗?或者我必须从头开始阅读吗?

1 个答案:

答案 0 :(得分:2)

如果您按照这个simple pattern when writing存储过程并且继续调用存储过程直到continuation返回null,则这不是问题。

这里的关键帮助是,在强制关闭存储过程之前,您将获得超过5秒的缓冲区。每当sproc即将关闭时,最新的数据库操作将返回false而不是true。 DocumentDB为您提供了足够的时间来处理最后返回的批次。

对于读取/查询操作(example countDocuments),推荐模式的关键元素是将读取/查询操作的延续标记存储在从存储过程返回的正文中。您可以根据需要多次设置主体。当达到资源限制或存储过程的任务完成时,存储过程正常存在时,只返回最后一个。

对于写操作(example createVariedDocuments),documentdb-utils仍然会查看返回的继续,以确定sproc是否已完成其工作,除非在这种情况下,它不会是一个读取/查询延续及其值并不重要。它只是指示您是否需要再次调用sproc的指示器。这就是为什么我把它设置为"价值并不重要"在我的例子中。除null之外的任何东西都可以。

关闭从存储过程执行返回的延续,以决定是否再次调用它。 Documentdb-utils将自动继续调用您的存储过程,直到continuation返回null,但您可以自己实现。 Documentdb-utils还包含一些实现此模式的example sprocs,供您轻松使用。 Documentdb-lumenize将此模式用于第n度,以实现在sproc内部运行的聚合引擎。

披露:我是documentdb-utils和documentdb-lumenize的作者。