解决“洋葱皮”问题的最有效的组织Mongo Schema的方法

时间:2018-10-08 18:01:46

标签: mongodb mongodb-query jsonschema

我正在构建一个UI,其中一次显示一组对象。每个对象都有孩子,每个孩子都有自己的孩子。每个实体都有时间序列数据。

我有一个代表时间的滑块。当我移动滑块时,您会看到对象A,B,C等及其随时间变化的值。如果选择对象A,则将看到其子项,并且可以滑动相同的滑块并查看子项超时的数据。因此,您可以将洋葱去皮,并继续从父母到孩子到其他孩子之间进行挖掘。

以下是可以完成此操作的示例Mongo模式:

{Time1: [{ Object_Name: A,
            Data: 10, 
            Children: [{
                Object_Name: AA,
                Data: 4, 
                Children: [etc, etc]
                },
                {
                Object_Name: AB,
                Data: 100
                Children: [etc, etc]
                }
            },
            { Object_Name: B,
            Data: 10, 
            Children: [{
                Object_Name: BA,
                Data: 11, 
                Children: [etc, etc]
                },
                {
                Object_Name: BB,
                Data: 15
                Children: [etc, etc]
                }
            }, .... }
Time2: [{ Object_Name: A,
            Data: 199, 
            Children: [{
                Object_Name: AA,
                Data: 44, 
                Children: [etc, etc]
                },
                {
                Object_Name: AB,
                Data: 1002
                Children: [etc, etc]
                }
            },
            { Object_Name: B,
            Data: 107, 
            Children: [{
                Object_Name: BA,
                Data: 12, 
                Children: [etc, etc]
                },
                {
                Object_Name: BB,
                Data: 150
                Children: [etc, etc]
                }
            }, .... }

        ],
etc, etc
}}

对于任何时间值,我都可以提取对象及其子对象的整个JSON,并仅在前端显示使用该JSON。我也可以进行增量查询。 (例如,我可以首先通过仅在特定时间获取父对象的数据来显示父对象。然后,如果用户单击父对象,则可以在同一时间戳下从Mongo提取子对象的值,因为我知道哪个父对象这样,我不必一次为所有孩子提取所有数据。)

我担心的是,这可能不是组织数据的最有效方法。例如,当这些数据的规模变大时,我不应该为特定的时间戳加载整个json。同样,我也不认为嵌套查询是最有效的。

对于为概念上“嵌套”并逐层检索的数据设计模式是否存在黄金法则?

0 个答案:

没有答案