Как записать данные в NoSQL и RDBMS одновременно и эффективно - PullRequest
0 голосов
/ 03 февраля 2019

Предположим, что установка, в которой мобильное приложение связывается со своим бэкэндом через API, и данные, полученные в результате этого взаимодействия (например, запись транзакций на основе JSON), записываются и считываются из экземпляра MongoDB.

Теперь, так как я хотел бы выполнить некоторую сложную аналитику для данных, хранящихся в mongo, я должен:

  • сохранять данные непосредственно в RDBMS одновременно с записью в Mongo (такбэкэнд-сервис вызывает Mongo и после успешной записи также вызывает RDBMS)

  • выполняет чтение из Mongo (с некоторыми интервалами) и загружает свежие данные в RDBMS

Я боюсь, что оба эти решения требуют также теоретической перестройки Mongo без схемы, чтобы быть в постоянном согласии с отношениями и схемами в RDBMS.Действительно ли требуется больше планирования изменений структуры документа в Mongo?Я интуитивно говорю да, но я ищу примеры из реальной жизни.Я надеюсь, что моя точка зрения достаточно ясна.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Я думаю, что вариант с наименьшими инженерными усилиями состоит в том, чтобы использовать соединитель Kafka для MongoDB, так чтобы соединитель считывал изменения MongoDB из оплога в почти реальном времени и записывал событие в Кафке.Затем из Kafka вы можете записать данные в реляционную БД с использованием потоковой обработки.

Двойная запись из пользовательского интерфейса не является хорошим вариантом, поскольку она может привести к задержке, сложности и эксплуатационным расходам.Что делать, если запись в одну БД не удалась?

0 голосов
/ 04 февраля 2019

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

Вы почти наверняка ищете здесь какое-то решение для обратной записи, вынимаете данные из MongoDB и записываете их в свое хранилище данных.Вопрос в том, насколько далеко может находиться ваше хранилище данных MongoDB?Многие решения, основанные на модели извлечения-преобразования-загрузки (ETL), работают по ночам, чтобы минимизировать влияние на онлайн-систему.Некоторые могут делать то же самое на почасовой основе, но будут иметь большее потенциальное влияние на работающую систему.

Поддержка транзакций за транзакцией, вероятно, не требуется для аналитической системы.Вы действительно хотите избежать этого, если можете, поскольку это создает гораздо большую нагрузку на обе системы, чем это обычно оправдано.

Чтобы ответить на второй вопрос, да, как только вы начнете в зависимости от схемы, она должна быть стабильной.Он не обязательно должен синхронизироваться с вашей целевой схемой, но ваш процесс ETL должен учитывать оба этих фактора и должен быть изменен в любое время, когда один из них существенно изменится.Быть «без схемы» не означает, что схемы нет, это просто означает, что схема не обеспечивается программным обеспечением, а обеспечивается зависимостями от системы.

0 голосов
/ 03 февраля 2019

Возможно, шаблон CQRS вам подойдет.См .: https://martinfowler.com/bliki/CQRS.html

Вы можете использовать СУБД для записи модели.Монго - для чтения модели.После каждой операции записи в СУБД вы должны обновлять вашу модель чтения (документ MongoDB) на основе данных из модели записи.

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