Хранение min, avg, max из [x, y, z] в базе данных, какую схему использовать? - PullRequest
0 голосов
/ 24 января 2019

Я хочу сохранить данные датчика GY-91 в базе данных MongoDB.

У меня есть данные в следующих двух макетах:

ag {'y': {'out': -0.013, 'max': -0.007, 'min': -0.016, 'avg': -0.0108, 'in': -0.009},
    'x': {'out': -0.217, 'max': -0.208, 'min': -0.221, 'avg': -0.2142, 'in': -0.213},
    'z': {'out': 0.991, 'max': 1.002, 'min': 0.983, 'avg': 0.9937, 'in': 0.993}}

gd {'y': {'out': 0.79, 'max': 1.4, 'min': 0.79, 'avg': 1.0717, 'in': 1.04},
    'x': {'out': 0.67, 'max': 0.85, 'min': 0.37, 'avg': 0.619, 'in': 0.37},
    'z': {'out': 0.98, 'max': 1.16, 'min': 0.49, 'avg': 0.8582, 'in': 0.79}}

mt {'y': {'out': 154.3, 'max': 155.9, 'min': 151.6, 'avg': 154.025, 'in': 154.6},
    'x': {'out': 24.6, 'max': 26.0, 'min': 23.0, 'avg': 24.6325, 'in': 25.0},
    'z': {'out': -19.5, 'max': -18.1, 'min': -22.1, 'avg': -19.6175, 'in': -19.2}}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ag {'out': {'y': -0.013, 'x': -0.217, 'z': 0.991},
    'max': {'y': -0.007, 'x': -0.208, 'z': 1.002},
    'min': {'y': -0.016, 'x': -0.221, 'z': 0.983},
    'avg': {'y': -0.0108, 'x': -0.2142, 'z': 0.9937},
    'in':  {'y': -0.009, 'x': -0.213, 'z': 0.993}}

gd {'out': {'y': 0.79, 'x': 0.67, 'z': 0.98},
    'max': {'y': 1.4, 'x': 0.85, 'z': 1.16},
    'min': {'y': 0.79, 'x': 0.37, 'z': 0.49},
    'avg': {'y': 1.0717, 'x': 0.619, 'z': 0.8582},
    'in':  {'y': 1.04, 'x': 0.37, 'z': 0.79}}

mt {'out': {'y': 154.3, 'x': 24.6, 'z': -19.5},
    'max': {'y': 155.9, 'x': 26.0, 'z': -18.1},
    'min': {'y': 151.6, 'x': 23.0, 'z': -22.1},
    'avg': {'y': 154.025, 'x': 24.6325, 'z': -19.6175},
    'in':  {'y': 154.6, 'x': 25.0, 'z': -19.2}}

Поскольку я буду хранить1 выборка в секунду (все ag, gd и mt в одном документе с временными метками), я буду использовать много агрегации для анализа данных.

По этой причине я исключилследующие три макета (первый был моим любимым из-за его космической эффективности).Это потому, что мне тогда пришлось бы использовать $unwind, $arrayElemAt или некоторые другие методы для доступа к элементам x, y, z.

ag [[-0.218, -0.22, -0.2142, -0.208, -0.21],
    [-0.009, -0.016, -0.0111, -0.006, -0.013],
    [0.989, 0.986, 0.9941, 1.001, 0.989]]

gd [[0.67, 0.37, 0.6133, 0.98, 0.37],
    [1.04, 0.79, 1.121, 1.46, 1.28],
    [0.79, 0.37, 0.819, 1.1, 0.73]]

mt [[24.6, 22.2, 24.5375, 26.4, 25.3],
    [154.6, 151.7, 153.89, 155.7, 153.9],
    [-19.9, -21.3, -19.46, -17.7, -19.5]]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ag [{'out': -0.21, 'max': -0.208, 'min': -0.22, 'avg': -0.2142, 'in': -0.218},
    {'out': -0.013, 'max': -0.006, 'min': -0.016, 'avg': -0.0111, 'in': -0.009},
    {'out': 0.989, 'max': 1.001, 'min': 0.986, 'avg': 0.9941, 'in': 0.989}]

gd [{'out': 0.37, 'max': 0.98, 'min': 0.37, 'avg': 0.6133, 'in': 0.67},
    {'out': 1.28, 'max': 1.46, 'min': 0.79, 'avg': 1.121, 'in': 1.04},
    {'out': 0.73, 'max': 1.1, 'min': 0.37, 'avg': 0.819, 'in': 0.79}]

mt [{'out': 25.3, 'max': 26.4, 'min': 22.2, 'avg': 24.5375, 'in': 24.6},
    {'out': 153.9, 'max': 155.7, 'min': 151.7, 'avg': 153.89, 'in': 154.6},
    {'out': -19.5, 'max': -17.7, 'min': -21.3, 'avg': -19.46, 'in': -19.9}]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ag {'max': [-0.208, -0.006, 1.001],
    'out': [-0.21, -0.013, 0.989],
    'avg': [-0.2142, -0.0111, 0.9941],
    'min': [-0.22, -0.016, 0.986],
    'in':  [-0.218, -0.009, 0.989]}

gd {'max': [0.98, 1.46, 1.1],
    'out': [0.37, 1.28, 0.73],
    'avg': [0.6133, 1.121, 0.819],
    'min': [0.37, 0.79, 0.37],
    'in':  [0.67, 1.04, 0.79]}

mt {'max': [26.4, 155.7, -17.7],
    'out': [25.3, 153.9, -19.5],
    'avg': [24.5375, 153.89, -19.46],
    'min': [22.2, 151.7, -21.3],
    'in':  [24.6, 154.6, -19.9]}

Итак, какой из первых двух макетов будет лучше?Может быть, также в контексте добавления индексов для более быстрого запроса?

Данные будут в основном запрашиваться, чтобы затем их можно было отобразить на графике d3 (библиотека Javascript).

Или, возможно, следуетЯ сплющил все, поэтому в каждом документе есть записи типа

{'ag_x_min': value, 'ag_y_max': value, 'gd_x_avg': value, ...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...