Создание панелей мониторинга на основе сложных данных mongoDB. Является ли распаковка и отображение таблиц bigquery правильным подходом? - PullRequest
0 голосов
/ 05 августа 2020

Мы используем MongoDB как серверную часть для нашего приложения, которое хранит всю информацию в глубоко вложенной структуре. Учитывая, что информационная панель является одной из следующих целей, мы хотели бы иметь возможность выполнять SQL запросов к этим данным в квази-реальном времени. Пример того, как выглядят данные в одной коллекции:

[
  {
    "id": "some_id",
    "path": "path_1",
    "activities": {
      "football": {
        "actor": "player",
        "object": "ball"
      },
      "swim": {
        "actor": "swimmer",
        "object": "pool"
      }
    }
  },
  {
    "id": "another_id",
    "path": "path_2",
    "activities": {
      "tennis": {
        "actor": "player",
        "object": "ball",
        "time": 15023920
      }
    }
  }
]

Фактические данные намного сложнее (глубже), и ключи объектов в dicts не совпадают, например, в приведенном выше фрагменте объекта 1 в действиях есть «плавание» и «футбол» в качестве ключей по сравнению с активностями объекта 2, в которых ключевым словом «теннис». Как лучше всего построить информационные панели на основе данных такого типа?

Я экспериментировал с приемом необработанного BSON объектов и отменой вложенности данных путем создания дополнительных таблиц. Например, я анализирую действия каждого объекта, добавляю их path_id и pu sh в таблицу bigquery. Применительно к приведенному выше примеру результат будет

[{
    "activity_name": "football",
    "path_id": "some_id",
    "actor": "player",
    "object": "ball"
  },
  {
    "activity_name": "swim",
    "path_id": "some_id",
    "actor": "swimmer",
    "object": "pool"
  },
  {
    "activity_name": "tennis",
    "path_id": "another_id",
    "actor": "player",
    "object": "ball",
    "time": 15023920
  }]

и pu sh их в bigquery. Это будет работать, но это:

  1. Утомительно, так как мы должны вручную создавать сопоставление каждого объекта mongoDB с несколькими json
  2. . Вносит проблемы репликации: мы хотим запросить данные с ограниченной задержкой, поэтому нам понадобится конвейер потоковой передачи, который следит за mon go opslogs и постоянно обновляет таблицы bigquery.

Это правильный подход или я захожу слишком далеко? Заранее спасибо.

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