MongoDb транслирует вставленные данные в режиме реального времени (или почти в реальном времени) - PullRequest
6 голосов
/ 24 августа 2011

У меня есть несколько коллекций MongoDB, которые берут несколько документов JSON из различных потоковых источников.Другими словами, существует ряд процессов, которые постоянно вставляют данные в набор коллекций MongoDB.

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

App Stream1 --> 
App Stream2 -->     MONGODB     --->  Aggregated Stream
App Stream3 -->

ИЛИ так:

App Stream1 -->                 --->  MongoD Stream1
App Stream2 -->     MONGODB     --->  MongoD Stream2
App Stream3 -->                 --->  MongoD Stream3

Вопрос в том, как мне передавать данные из Mongo без необходимости непрерывного опроса / запросабаза данных?

Очевидный ответ на вопрос: «Почему бы вам не изменить эти процессы потоковой передачи приложений для отправки сообщений в очередь, такую ​​как Rabbit, Zero или ActiveMQ, которая затем отправляет их вашим процессам Mongo Streaming и Mongo одновременно?как это ":

                 MONGODB
                   /|\  
                    |
App Stream1 -->     |          --->  MongoD Stream1
App Stream2 -->  SomeMQqueue   --->  MongoD Stream2
App Stream3 -->                --->  MongoD Stream3

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

Итак, как мне транслировать сообщения из коллекции Mongo (без использования GridFS и т. Д.) В эти нисходящие приложения.Основная идея заключалась в том, чтобы просто опросить новые документы, и каждый собранный документ обновил его, добавив еще одно поле в документы JSON, хранящиеся в базе данных, во многом как флаг процесса в таблице SQL, в которой хранится обработанная метка времени.Т.е. каждый 1-секундный опрос для документов, где обработано == null .... добавить обработано = now () .... обновить документ.

Есть ли более точный / более вычислительно эффективный метод?

К вашему сведению - это все процессы Java.

Ура!

1 Ответ

3 голосов
/ 24 августа 2011

Если вы пишете в ограниченную коллекцию (или коллекции), вы можете использовать tailablecursor для отправки новых данных в поток или в очередь сообщений, откуда они могут быть переданы.Однако это не будет работать для коллекции без ограничений.

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