Cosmos .NET SDK的ReadManyItemsStreamAsync方法是否存在批量大小限制?
Cosmos SDK for .NET
ReadManyItemsStreamAsync 批量限制说明 核心结论
ReadManyItemsStreamAsync 并非无限制返回所有请求的文档,它受限于Cosmos DB底层ReadMany API的请求限制,无法一次处理超过200个文档ID(或请求Payload超过1MB)的请求,否则服务端会返回400错误。
具体限制细节
- 单次调用最多可传入200个文档ID,这是Cosmos DB服务端对ReadMany API的硬性限制。
- 即使ID数量不到200,如果所有ID的总字符长度导致请求Payload超过1MB,同样会触发请求失败。
处理大量ID的解决方案
因为该方法不提供迭代器或分页机制,若要读取3000、15000这类大规模ID集合,必须自行拆分ID列表,分批调用ReadManyItemsStreamAsync,并将每一批的响应流依次写入目标文件。
示例代码(简化版):
var targetFileStream = new FileStream("output.json", FileMode.Create); var allDocumentIds = GetThousandsOfDocumentIds(); // 你的ID集合 var batchSize = 200; for (int i = 0; i < allDocumentIds.Count; i += batchSize) { var batchIds = allDocumentIds.Skip(i).Take(batchSize).ToList(); var response = await container.ReadManyItemsStreamAsync( partitionKey: new PartitionKey("your-partition-key"), ids: batchIds); if (response.IsSuccessStatusCode) { await response.Content.CopyToAsync(targetFileStream); // 可选:如果需要分隔多个批次的JSON数据,可写入换行或分隔符 } } targetFileStream.Close();
补充说明
微软官方文档未在ReadManyItemsStreamAsync的方法说明中直接提及该限制,但这是底层ReadMany API的通用规则,所有封装该API的SDK(包括.NET)都遵循此约束。
内容的提问来源于stack exchange,提问作者Thiago Silva
相关产品推荐
相关产品推荐

