繁体   English   中英

MongoDb实时(或接近实时)流式传输插入的数据

[英]MongoDb Streaming Out Inserted Data in Real-time (or near real-time)

我有许多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进程。

干杯!

如果要写入上限集合(或集合),则可以使用tailablecursor在流上推送新数据,或者从可以流出的消息队列中推送新数据。 但是,这对于非上限集合不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM