azure-cosmosdb - CosmosDB 中的许多小文档
问题描述
我有许多(大约 100 条)数据要与 CosmosDB 中的文档相关联。每条数据都很小(大约 100 字节)。
我的第一个解决方案是将数据作为数组存储在文档中。这可以正常工作,但为了将新项目附加到数组中,我需要从 CosmosDB 读取文档,添加元素,然后将文档替换回 CosmosDB。
而不是这样做,我想将每条数据作为自己的文档存储在同一个分区中。拥有许多小文档与一个聚合文档相比有什么缺点?
解决方案
拥有许多小文档与一个聚合文档相比有什么缺点?
我想说的是,我建议您存储每条数据,而不是一个汇总文档。
原因1:正如您在问题中提到的,如果您想将元素添加到文档中,您需要从 CosmosDB 中读取文档,然后替换文档,因为 cosmos db 目前不支持部分更新。(请参阅此反馈并在需要时关注它:https ://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/6693091-be-able-to-do-partial-updates-on-document )一项庞大而乏味的工作。
原因2:如果你存储的数据块,你可以查询它们平面。(从 c 中选择 *)
对于单个数组文档,您需要使用join来访问嵌套属性。(select a.array from c join array in c.array)
原因3:如果你存储数据片段,你可以将它们管理到不同的分区。即使你现在不需要它,为什么不保留这个功能以备将来使用。
原因4:至于成本,这完全取决于RUs和存储以及对cosmos db的请求会消耗RUs。如果您存储数据片段,您只需要根据需要访问特定文档,我认为这更经济。
推荐阅读
- python - 在新的索引级别下合并熊猫数据框
- cordova - 如果我将我的 cordova 版本从 7 更新到 10,是否有可能某些插件会停止工作?
- c# - 如何使用 Entity Framework Core 在 On 子句中添加多个条件
- java - 每次单击/点击时要更改的按钮文本
- flutter - Flutter Provider-Consumer 异常错误
- typescript - 如何动态加载具体实现并参数化对象创建?
- javascript - 在移动设备上更改 DIV 的 id
- node.js - Express Server 不会在 Mac 上解决 Promise
- python - 403 Forbidden while making ajax request to endpoint in Django
- python - 当我无权访问或没有可用信息时,有没有办法跳过 URL(Json 文件)