嵌套结构如何影响 DocumentDB 查询性能?

How does nesting structures affect DocumentDB query performance?

问题可能会被表述为 "to flatten or not to flatten?"

如果我将嵌套的 JSON 文档存储在 DocumentDB collection 中,查询这些嵌套结构的性能是否与将这些嵌套结构存储在单独的 collection 中一样自己的平面文件?

有问题的数据将被写入一次并且(可能)永远不会更新。报告性能在要求列表的顶部。

一方面,将数据存储在嵌套结构中似乎是利用 no-schema / no SQL 技术的 "correct" 方式。也就是说,我们自然希望将 header 数据与详细数据关联起来,所有这些都在一个地方和上下文中。但是,一旦我们每分钟写入数千行,同时 运行 从 Web 应用程序报告 collection,它能否扩展并继续执行?

或者,将详细数据展平,将 header 数据的相关部分冗余存储在详细信息 collection 的每一行中会更好吗?作为一个 long-time RDBMS 开发者/用户,我倾向于不冗余地存储数据,但我是否应该为了高性能而放弃这个想法?

平面数据结构在 DocumentDB 中的查询效率更高吗?差距有多大?也就是说,这样做我放弃了什么,如果性能是首要(但不是唯一)优先事项,是否值得?

对此没有一个 "correct" 答案。

选择是将关系表示为单个嵌入式文档(也称为反规范化)还是像在 RDBMS 中那样表示为引用(也称为规范化)在很大程度上取决于您的用例/场景。

通常,您会希望针对读取密集型场景进行反规范化,并针对写入密集型场景进行规范化。

DocumentDB 团队刚刚发布了一份关于此的参考文档;我建议阅读一下:http://azure.microsoft.com/en-us/documentation/articles/documentdb-modeling-data/