Azure cosmosdb Cosmos DB平面与嵌套设计

Azure cosmosdb Cosmos DB平面与嵌套设计,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,这是Cosmos DB(SQL API)查询: 比……快或便宜 SELECT * FROM c WHERE c.Personal.Name = 'John' 我试图理解设计数据平面与嵌套(非规范化与非规范化)的结果 谢谢您提到的查询的两个版本在成本方面可能非常接近,但在我的经验中,模型复杂性更重要的影响是写入成本。默认情况下,Cosmos为来自项根的每个项创建索引。这意味着模型越复杂,索引的路径就越多,这直接增加了写操作的成本。如注所示: 通过优化索引的路径数,您可以 大幅减少写入操作的延迟和

这是Cosmos DB(SQL API)查询:

比……快或便宜

SELECT * FROM c WHERE c.Personal.Name = 'John'
我试图理解设计数据平面与嵌套(非规范化与非规范化)的结果


谢谢

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

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

因此,如果在根项目中嵌入一个具有多个属性的
个人
项目,则会使项目的编写成本更高

还有很多关于StackOverflow的问题,人们问如何为他们复杂的对象模型编写查询,他们从不喜欢“为什么不是更简单的模型?”这句话(如果有机会,请避免这种命运。)


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

查看影响的最简单方法就是尝试并查看RU中的更改。简短回答:是的,它将使用稍微少一点的RU,这是有意义的,因为文档稍微小一点。然而,这是一个如此微小的增加,它不应该在你的决定去一个或另一个重量。(编辑)
SELECT * FROM c WHERE c.Personal.Name = 'John'