我写了一个导入程序,它从磁盘读取XML文件,将它们转换为JSON并将它们存储到DocumentDB中。存在使用Node.js SDK存储的索引文件。
第二种类型的文件包含章节。这些章节使用存储过程插入到索引文件中。存储过程从数据库中获取索引文档,将章节文档插入索引文档并将更新的文档写回数据库。
在第三个文档之后,我从存储过程中收到错误,说明存储过程的执行已被阻止,因为它多次超出资源限制。我该如何处理这种情况?
答案 0 :(得分:0)
在此处提供原始问题的答案,而不是在评论中,并在评论中解决第二个问题。
首先回答原始问题。在存储过程内部,每当您在响应任何数据库操作时收到错误时,您需要立即包装存储过程或冒险将该存储过程列入黑名单。但是,即使正确终止存储过程,也存在导致存储过程被列入黑名单的错误。要解决此问题,您可以删除然后重新创建存储过程。我创建了一个npm包documentdb-utils,它可以自动为你完成。
在评论中你指出,一旦你超过了它,你就会遇到另一个限制,"请求率很大",代码429.当你忽略' x-ms-retry时会发生这种情况-after-MS'标头响应。在提交下一个请求之前,您应该等待很多毫秒。
以下是documentdb-utils中的代码:
delay = (ms, func) ->
setTimeout(func, ms)
processError = (err, header, toRetryIf429, nextIfNot429 = null) ->
debug('processError()')
if err.code is 429
retryAfter = Number(header['x-ms-retry-after-ms'])
timeLostToThrottling += retryAfter
debug("Throttled. Retrying after delay of #{retryAfter}ms")
delay(retryAfter, toRetryIf429)
else if nextIfNot429?
nextIfNot429()
else
callCallback(err)