Наиболее эффективный способ организации схемы Монго для решения задачи «Очищение лука» - PullRequest
0 голосов
/ 08 октября 2018

Я создаю пользовательский интерфейс, в котором одновременно отображается группа объектов.У каждого объекта есть дети, и у каждого ребенка есть свои дети.У каждого отдельного объекта есть данные временного ряда.

У меня есть ползунок, который представляет время.Когда я перемещаю ползунок, вы видите объекты A, B, C и т. Д. И их значения с течением времени.Если вы выберете объект A, вы увидите его дочерние элементы, и вы можете сдвинуть ползунок на то же самое и просмотреть данные для дочерних сверхурочных.Следовательно, вы можете очистить лук и продолжать копаться от родителя к ребенку и т. Д.

Вот примерная схема Монго, которая может выполнить это:

{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 для определенной отметки времени.Кроме того, я не думаю, что вложенные запросы являются наиболее эффективными.

Существует ли золотое правило в отношении разработки схем для данных, которые концептуально «вкладываются» и извлекаются слой за слоем?

...