相同的Azure Cosmos DB一次运行,另一次运行则显示消息大小太大

时间:2018-11-10 07:30:45

标签: azure-cosmosdb azure-cosmosdb-sqlapi

我正在azure门户中编写Azure Cosmos DB存储过程,我正在检查它最初可以提供的最大大小响应,但是在显示任何消息大小错误之后,无论在任何大小上它都给了我4.8 MB响应, 。稍后,在执行5分钟的相同程序和参数后5分钟,它显示页面大小过大的错误。

    // SAMPLE STORED PROCEDURE
function sample(prefix) {
    var collection = getContext().getCollection();

    // Query documents and take 1st item.
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT r.data.truckSerialNo FROM root r',{pageSize : -1},
    function (err, feed, options) {
        if (err) throw err;

        // Check the feed and if empty, set the body to 'no docs found', 
        // else take 1st element from feed
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            console.log(feed.length);
            var response = getContext().getResponse();
            var body = { prefix: prefix, feed: feed };
            var str = {};
            str.x1 = body ;
            str.x2 = body ;




            response.setBody(JSON.stringify(str));
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

和错误

  

无法执行存储过程testProcedure进行收集   iotcollection:   {“ code”:400,“ body”:“ {\” code \“:\” BadRequest \“,\” message \“:\”消息:   {\\“错误\\”:[\\“执行功能时遇到异常。   异常=错误:由于以下原因,结果消息将太大   \\\\“身体\\\\”。从脚本返回当前消息并使用   延续令牌以再次调用脚本或修改您的   脚本。\\ r \\ n堆栈跟踪:错误:生成的消息也将太   因为\\\\“ Body \\\\”而大。从脚本返回当前   消息并使用延续令牌再次调用脚本或进行修改   您的脚本。\\ n为validateSize(bulkUpsert_v_1_0.js:177:25)\\ n   在setValueInternal(bulkUpsert \\“]} \ r \ nActivityId:   d61226ab-4d5e-4a3d-aa09-83351649ce4c,请求URI:   / apps / 59d3b9ef-17ca-4bbf-8a11-39d0199a8d29 / services / 1b26e00f-1f51-4d34-88ec-4090b8e7db00 / partitions / 45a313b7-2cf2-419e-9885-48bf9cfe6277 / replicas / 131862936473830809p /,   RequestStats:\ r \ nRequestStartTime:2018-11-10T06:41:26.3320532Z,   尝试的区域数:1 \ r \ n,SDK:   Microsoft.Azure.Documents.Common / 2.1.0.0 \“}”,“ activityId”:“ d61226ab-4d5e-4a3d-aa09-83351649ce4c”,“ substatus”:413}

1 个答案:

答案 0 :(得分:0)

根据我的经验,当您的数据在cosmos db查询操作中过大时,强烈不建议使用{pageSize : -1}设置。持续性令牌(在cosmos db rest api中为x-ms-continuation-token)需要考虑到您的业务中。请参考我之前的案例:CosmosDB stored procedure not returning all documents

正如您所说,稍后在5分钟后执行相同的过程和相同的参数时,显示页面大小过大的错误。大小限制是总响应,其中包括其他Response Headers,而不仅是body部分。此外,如果设置{pageSize : -1},查询操作将根据当前性能返回最大结果。它不是固定的。