Cosmos DB Flat VS嵌套设计

时间:2020-11-10 08:00:39

标签: azure-cosmosdb azure-cosmosdb-sqlapi

这是Cosmos DB(SQL API)查询:

SELECT * FROM c WHERE c.Name = 'John'

更快或更便宜

SELECT * FROM c WHERE c.Personal.Name = 'John'

我试图了解设计我的数据平面VS嵌套(未规范化还是反规范化)的后果。

谢谢

1 个答案:

答案 0 :(得分:0)

您提到的查询的两个版本在成本方面可能非常接近,但是在我的经验中,模型复杂度更重要的影响是写入成本。默认情况下,Cosmos为项目根目录中的每个possible path创建一个索引。这意味着模型越复杂,索引的路径就越多,这直接增加了写操作的成本。如indexing docs所示:

通过优化索引的路径数,您可以 大大减少了写操作的延迟和RU费用。

因此,如果您将Personal项目嵌入具有多个属性的根项目中,则会使项目的编写成本更高。

有关StackOverflow的问题也很多,有人问如何为复杂的对象模型编写查询,他们从来不喜欢这样的注释:“为什么没有更简单的模型?”如果有机会,请避免这种命运。 :)

通常,保持项目尽可能简单和小似乎是遵循的经验法则。和往常一样,测试并查看。查询的RU成本是确定性的,因此您只需调整变量并运行快速测试即可直接了解更改的影响。