我有许多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确保首先保存消息,以避免重复并确保ID全部生成等.Mongo必须位于中间作为持久层。
那么我如何将消息从Mongo集合(不使用GridFS等)流式传输到这些下游应用程序中。基本思路只是轮询新文档,并且每个收集的文档都通过向存储在数据库中的JSON文档添加另一个字段来更新它,就像存储处理时间戳的SQL表中的进程标志一样。即每1秒轮询一次处理的文件== null .... add processed = now()....更新文件。
是否有更整洁/更有计算效率的方法?
仅供参考 - 这些都是Java进程。
干杯!