【问题标题】:Request Size is too large请求大小太大
【发布时间】:2017-09-13 14:20:57
【问题描述】:

我已经为 bulkInsert 编写了存储过程,我也在其中处理 SP 的超时。在执行 SP 时,我仍然收到“请求大小太大”异常。给低于 SP。请帮助我,我错在哪里。我只从复数视觉中获取了所有代码。并以与他们相同的方式处理。

function spBulkInsert(docs){
    if (!docs) {
        throw new Error('Documents array is null or not defined!');
    }
    var context = getContext();
    var collection = context.getCollection();
    var response = context.getResponse();

    var docCount = docs.length;

    if (docCount == 0) {
        response.setBody(0);
        return;
    }
    var count = 0;
    createDoc(docs[0]);

    function createDoc(doc) {
        var isAccepted = collection.createDoucument(collection.getSelfLink(), doc, docCreated);
        if (!isAccepted) {
            response.setBody(count);
        }
    }
    function docCreated(err, doc) {
        if (err) throw err;
        count++;
        if (count == docCount) response.setBody(count);
        else createDoc(docs[count]);
    }
};

上述SP的处理代码:

var totalInsertedCount=0;
                while (totalInsertedCount < data.Count)
                {
                    var insertedCount = await client.ExecuteStoredProcedureAsync<int>(
                                            UriFactory.CreateStoredProcedureUri("TestDoc", "coll", "spBulkInsert"),
                                            new RequestOptions { PartitionKey = new PartitionKey("partitionKey") }, data);
                    totalInsertedCount += insertedCount;
                    Console.WriteLine("Inserted {0} documents ({1} total, {2} remaining)", insertedCount, totalInsertedCount, data.Count - totalInsertedCount);
                    data= data.GetRange(insertedCount, data.Count - insertedCount);
                }

【问题讨论】:

  • 您将多少数据传递给您的存储过程?没有更多细节,很难知道错误的原因。请相应地编辑您的问题。
  • 是的!我正在传递大于 2MB 的数据。但在 SP 中,我在 isAccepted 变量中处理它。另外,我也可以分享SP处理代码。
  • @Shraddha 嗨,Shraddha。请先确保每个文档的大小不超过2MB。根据我的经验,您的错误是由于一次批量导入执行的数据过多。请求超时,SDK 会自动回滚重试。但是,在您的代码中,我建议您在不更改吞吐量的情况下将数据切入导入并手动重试异常。
  • 文档大小完美。我添加了仅向存储过程发送 2MB 的代码,现在可以正常工作了。
  • 我在想,不管我给SP多少文件,它都会在那里处理。但是我错了。我总是必须将最多 2MB 的数据传递给 SP。我想这就是我现在的结论了。

标签: javascript azure azure-cosmosdb


【解决方案1】:

正如总结,The document size in the request exceeded the allowable document size for a request. The max allowable document size is 2MB. 提到了here

Stored Procedure Bulk importing data是一个执行存储过程的过程,只有一个HTTP请求,每个HTTP请求请求的文档大小受2MB下面的Cosmos DB限制。

建议

1.您可以拆分文档数据并批量导入。

2.您可以尝试简化您的文档数据,例如删除不必要的''和'\n'等。

【讨论】:

    【解决方案2】:

    无论写入发生在何处(SP 或 API 或门户中),Cosmos DB 中的文档大小始终有 2MB 的限制。在提交到 Cosmos DB 之前,文档必须在客户端进行拆分/解嵌/链接/链接/等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 2018-10-20
      • 2019-12-20
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多