Мы используем 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. Это будет работать, но это:
- Утомительно, так как мы должны вручную создавать сопоставление каждого объекта mongoDB с несколькими json
- . Вносит проблемы репликации: мы хотим запросить данные с ограниченной задержкой, поэтому нам понадобится конвейер потоковой передачи, который следит за mon go opslogs и постоянно обновляет таблицы bigquery.
Это правильный подход или я захожу слишком далеко? Заранее спасибо.