我要与CosmosDB中的文档关联许多(100量级)数据。每条数据都很小(约100字节)。
我的第一个解决方案是将数据存储为文档内部的数组。可以,但是为了将新项目添加到数组中,我需要从CosmosDB中读取文档,添加元素,然后将文档替换回CosmosDB中。
我不想这样做,而是希望将每个数据作为其自己的文档存储在同一分区中。拥有多个小文档而不是一个汇总文档有什么弊端?
答案 0 :(得分:0)
取决于您的用例。
对于频繁的添加操作,您首先要阅读并更新文档(2个操作),这比创建新文档(1个操作)要花费更多的成本。
但是,如果文档之间存在某种关系(例如传统SQL中的外键),那么如果您采用上述方法#1(具有更高的成本),则获取数据将需要多次查询(否则,您将获得)一次查询即可获取完整数据(低成本)。
答案 1 :(得分:0)
拥有许多小文档与使用小文档有什么缺点 汇总文件?
我想说的是,我建议您存储每条数据,而不是一个汇总的文档。
原因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访问嵌套属性。(从c.array中的c join array中选择a.array)
原因3:如果存储数据片段,则可以将它们管理到不同的分区中。即使您现在不需要它,为什么不保留此功能。
原因4:至于成本,这完全取决于RU和存储,并且对cosmos db的请求将消耗RU。如果存储数据,则只需要根据需要访问特定文档,我认为这更经济。
答案 2 :(得分:0)
我现在正面临这个问题,我想在这里发表我的贡献。我必须存储一些状态,此状态是我每小时获得一次的指标,然后我有两个选择:
我选择了第二个,因为: