我做了一些测试,发现 CosmosDB 的最大文档大小限制似乎与文档不一致: https://learn.microsoft.com/en-us/azure/cosmos-db/concepts-limits#per-item-limits
< 2Mb
,如官方文档中所述(上面的链接)> 2Mb
发生RequestEntityTooLarge错误:Microsoft.Azure.Cosmos.CosmosException:响应>状态代码未指示成功:RequestEntityTooLarge(413);子状态:0; >活动ID:c1977df8-ec39-40b9-bd69-6e6a40ff6c00;原因:(消息:{“错误”:[“请求>大小太大”]}
结论:结果匹配文档
< 2Mb
> 2Mb
并且文档状态不同(或者我遗漏了一些东西)错误:MongoDB.Driver.MongoWriteException:写入操作导致错误。 > WriteError:{类别:“未分类”,代码:16,消息:“错误= 16,详细信息='响应>状态代码不指示成功:RequestEntityTooLarge(413);子状态:0;>ActivityId:8f20b261-e1c5-4ca9 -b4e6-6cbc5352ce7e; 原因:(消息:{“错误”:[“请求>大小太大”]}
结论:结果与文档不符
注意
var itemStr = JsonConvert.SerializeObject(item);
var bytes = Encoding.UTF8.GetBytes(itemStr);
Console.WriteLine($"total num of bytes: {bytes.Length}");
关于成功将一个大项写入MongoDB,我也通过mongoshell验证了存储的文档大于4Mb:
Object.bsonsize(db.Items.findOne({_id:ObjectId("61dec458316798c759091aef")}))
问题:
虽然可以使用 Cosmos DB 的 MongoDB API 存储超过 2MB 的未压缩数据,但我不建议这样做,因为您不可能知道在插入之前将拥有多少压缩数据。
我还应该指出,一般来说,与较大尺寸的文档相比,使用更多数量的较小文档会在成本和延迟方面获得更好的性能(这也适用于本机 MongoDB)。因此,当您为应用程序建模数据时,请记住这一点。
https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/how-to-configure-capability) 顺便说一句...更改后适用于新集合。如果您需要对现有集合进行此操作,则需要导出数据、删除集合并再次创建它。恕我直言,如果可以改变设计,你应该......