У меня есть несколько коллекций 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.
Ура!