是否可以禁用Azure CosmosDB存储过程的5秒时间限制
我最近一直在使用Azure的CosmosDB中的存储过程来更新一些文档。文档有点粗(5000多行文档,处理1000行左右),存储过程需要5秒以上的时间运行。5秒的限制将停止存储过程的运行,并抛出“超出时间限制”错误。所以,我想问的是,这是否可以关闭或配置 我已经阅读了一些可能的解决方法,我正在研究这些方法以及其他一些想法,但是,要明确的是,这个问题的目的是确定是否可以关闭或配置这5秒的限制,而不是我是否可以解决它 我一直试图在官方文件中找到这样的地方,所以如果有人知道在哪里,那就太好了 我还尝试增加集合的吞吐量,以减少运行所需的时间。这很有帮助,但存储过程仍然达到了极限 所以,我想问的是,这是否可以关闭或配置 显然,正如@David Makogon所说,不能关闭或配置cosmos db存储过程运行时的限制 因此,我建议您在线程中采用变通方法:。请使用以批处理数据。您可以参考下面的是否可以禁用Azure CosmosDB存储过程的5秒时间限制,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我最近一直在使用Azure的CosmosDB中的存储过程来更新一些文档。文档有点粗(5000多行文档,处理1000行左右),存储过程需要5秒以上的时间运行。5秒的限制将停止存储过程的运行,并抛出“超出时间限制”错误。所以,我想问的是,这是否可以关闭或配置 我已经阅读了一些可能的解决方法,我正在研究这些方法以及其他一些想法,但是,要明确的是,这个问题的目的是确定是否可以关闭或配置这5秒的限制,而不是我是否可以解决它 我一直试图在官方文件中找到这样的地方,所以如果有人知道在哪里,那就太好了 我还尝试
伪代码
:
function updateArticlesDetailsX() {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var response = getContext().getResponse();
var docCount = 0;
var counter = 0;
tryQueryAndUpdate();
function tryQueryAndUpdate(continuation) {
var query = {
query: "select * from root r"
};
var requestOptions = {
continuation: continuation
};
var isAccepted =
collection
.queryDocuments(collectionLink,
query,
requestOptions,
function queryCallback(err, documents, responseOptions) {
if (err) throw err;
if (documents.length > 0) {
// If at least one document is found, update it.
docCount = documents.length;
for (var i=0; i<docCount; i++){
tryUpdate(documents[i]);
}
response.setBody("Updated " + docCount + " documents");
}
else if (responseOptions.continuation) {
// Else if the query came back empty, but with a continuation token;
// repeat the query w/ the token.
tryQueryAndUpdate(responseOptions.continuation);
} else {
throw new Error("Document not found.");
}
});
if (!isAccepted) {
throw new Error("The stored procedure timed out");
}
}
function tryUpdate(document) {
//Optimistic concurrency control via HTTP ETag.
var requestOptions = { etag: document._etag };
//Update statement goes here:
document.x = "some new value";
var isAccepted = collection
.replaceDocument(document._self,
document,
requestOptions,
function replaceCallback(err, updatedDocument, responseOptions) {
if (err) throw err;
counter++;
});
// If we hit execution bounds - throw an exception.
if (!isAccepted) {
throw new Error("The stored procedure timed out");
}
}
}
函数updateArticlesDetailsX(){
var collection=getContext().getCollection();
var collectionLink=collection.getSelfLink();
var response=getContext().getResponse();
var-docCount=0;
var计数器=0;
tryQueryAndUpdate();
函数tryQueryAndUpdate(续){
变量查询={
查询:“从根r中选择*
};
var请求选项={
续:续
};
var被接受=
收集
.queryDocuments(collectionLink,
查询
请求选项,
函数queryCallback(错误、文档、响应选项){
如果(错误)抛出错误;
如果(documents.length>0){
//如果至少找到一个文档,请更新它。
docCount=documents.length;
对于(var i=0;它是不可配置的。除了RU配置之外,您唯一可以更改的是您的数据模型。或者可能是您的存储过程,以找到优化。感谢您的快速响应。我想您不知道这是否会在任何时候发生更改?我不知道,但无论如何这都不是可以讨论的(路线图)。感谢您的回复。正如我在OP中所说,我正在寻找一些替代方案,并将在这里查看您的示例。我想要的是一个确定的是或否,我得到:)