首页 > 解决方案 > CosmosDB 中的许多小文档

问题描述

我有许多(大约 100 条)数据要与 CosmosDB 中的文档相关联。每条数据都很小(大约 100 字节)。

我的第一个解决方案是将数据作为数组存储在文档中。这可以正常工作,但为了将新项目附加到数组中,我需要从 CosmosDB 读取文档,添加元素,然后将文档替换回 CosmosDB。

而不是这样做,我想将每条数据作为自己的文档存储在同一个分区中。拥有许多小文档与一个聚合文档相比有什么缺点?

标签: azure-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。如果您存储数据片段,您只需要根据需要访问特定文档,我认为这更经济。


推荐阅读