У меня есть две базы данных с одинаковыми данными (~ 1 ТБ): одна для записи без шардов и индексов, которые мне нужны для обновления, а вторая для чтения сегментированных и индексов только для чтения. Как настроить автоматическую репликацию между двумя базами данных? Мне нужно синхронизировать эти базы данных. Теперь я использую очередь сообщений и скрипты для перемещения данных, но есть ли какое-нибудь общее решение этой проблемы?
У меня есть две базы данных с одинаковыми данными (~ 1 ТБ): одна для записи без шардов и индексов, которые мне нужны для обновления, а вторая для чтения сегментированных и индексов только для чтения. Как настроить автоматическую репликацию между двумя базами данных? Мне нужно синхронизировать эти базы данных.
Вы описываете синхронизацию между двумя развертываниями. MongoDB's встроенная репликация поддерживает только репликацию между участниками одного развертывания, где все участники совместно используют общую историю данных через журнал операций репликации. При независимых развертываниях, каждое из которых разрешает доступ для записи, нет гарантии, что развертывания будут (или останутся) синхронизированными.
Если вы работаете с одним и тем же набором данных, было бы более типично иметь одно сегментированное развертывание с соответствующим зональным сегментированием и предпочтениями чтения для достижения желаемого изоляция рабочей нагрузки.
Шардинг также чаще используется для горизонтального масштабирования записи, при этом каждый сегмент поддерживается набором реплик для избыточности и масштабирования чтения.
Теперь я использую очередь сообщений и скрипты для перемещения данных, но есть ли какое-нибудь общее решение этой проблемы?
Если вы действительно хотите поддерживать отдельные развертывания, вы можете написать сценарий мониторинга, используя изменить потоки для просмотра отдельных коллекций (MongoDB 3.6+) или всех несистемных коллекций (MongoDB 4.0+). Есть также сторонние инструменты, такие как Соединитель Mongo, или вы можете использовать собственное решение с очередями сообщений (как вы это сделали).
Если нет веских причин не использовать встроенную репликацию, я бы подумал об этом, чтобы избежать административных накладных расходов на синхронизацию и обслуживание двух развертываний.