You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB批量存储超100条记录的事务实现方案咨询

解决方案:使用Cosmos DB存储过程实现大批次事务性文档创建

核心原理

Cosmos DB的存储过程运行在容器的分区键范围内,原生支持ACID事务——只要存储过程执行中任何一步失败,所有已执行操作会自动回滚,完全满足你的事务一致性需求。而且存储过程不受单批次100条操作的限制,只要控制好执行时长和资源消耗,就能处理远超100条的文档创建。

具体实现步骤

  1. 编写存储过程
    创建接收文档数组参数的存储过程,递归遍历数组完成批量创建。示例JavaScript代码:

    function bulkCreateDocuments(documents) {
        var collection = getContext().getCollection();
        var response = getContext().getResponse();
        var count = 0;
    
        function createDocument(doc) {
            var isAccepted = collection.createDocument(collection.getSelfLink(), doc, function(err) {
                if (err) throw err;
                count++;
                count === documents.length 
                    ? response.setBody(`${count} documents created successfully.`) 
                    : createDocument(documents[count]);
            });
            if (!isAccepted) response.setBody("Document creation rejected by server.");
        }
    
        documents.length === 0 
            ? response.setBody("No documents to create.") 
            : createDocument(documents[0]);
    }
    
  2. 部署存储过程
    通过Azure门户、Azure CLI或对应SDK,将存储过程部署到目标Cosmos DB容器。若容器有分区键,部署时需明确该存储过程作用的分区范围。

  3. 调用存储过程
    使用SDK调用存储过程并传入待创建的文档数组。以.NET SDK为例:

    var container = cosmosClient.GetContainer("YourDBName", "YourContainerName");
    var documents = new List<YourDocumentModel>();
    // 填充documents数组,数量可超过100
    
    var response = await container.Scripts.ExecuteStoredProcedureAsync<string>(
        "bulkCreateDocuments",
        new PartitionKey("TargetPartitionKeyValue"), // 容器有分区键时必须指定
        documents);
    
    Console.WriteLine(response.Resource);
    

注意事项

  • 分区限制:存储过程的事务仅覆盖单个分区键范围,若文档跨多个分区,需按分区分组调用存储过程,同一分区内的操作仍保持原子性。
  • 执行时长:存储过程默认最长执行时间为5秒,可在Cosmos DB账户设置中调整至10秒。若文档量过大导致超时,需拆分到多次存储过程调用(单调用内仍保持事务性)。
  • RU配额:批量创建会消耗大量请求单位(RU),需确保容器RU配额充足,避免因RU耗尽导致操作失败。

内容的提问来源于stack exchange,提问作者Loren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:40:55