【问题标题】:How to read data in real time from mongoDB using python如何使用python从mongoDB实时读取数据
【发布时间】:2016-03-08 08:29:44
【问题描述】:

我想从 mongoDB 中实时或近乎实时地读取数据(来自一个集合的文档),并将其转换为 pandas 数据帧以进行进一步分析。

我知道如何从 mongoDB 获取数据到 python,但是我想保持连接打开,这样每当有新数据进来时,我都会在 Python 中进行实时分析。

client = MongoClient('localhost', 27017)
db = client.test_insert
collection = db.dataset

df = pd.DataFrame(list(db.dataset.find().limit(1)))

请帮忙:)

【问题讨论】:

  • 据我所知,您只能通过定期轮询数据库来做到这一点。

标签: python mongodb pandas pymongo


【解决方案1】:

如果您的查询是在索引字段上,则不应使用可尾游标,而应使用常规游标。您可以在 Python 中或更灵活地在 MongoDB 中跟踪索引字段的最后一个值。然后,您可以使用无限 while 循环来查询任何新记录:

db.<collection>.find( { indexedField: { $gt: <lastvalue> } } )

根据数据框分析的复杂性,您可能需要调查是否应该添加像RabbitMQ 这样的工作队列。这种设计将允许一个进程将新记录从 MongoDB 推送到消息队列,而多个进程处理该队列上的传入消息。

【讨论】:

    【解决方案2】:

    您可以将您的收藏转换为capped collection,以便tailable cursors 可用。但请注意这会带来的其他影响(整个集合的固定大小(以字节为单位),当超过大小时,旧文档将被删除,无法进行增加文档大小的更新)。

    如果您不想为收藏设置上限,那么您也可以创建a tailable cursor on the oplog collection。这样,您的应用程序将收到副本集上所有更改的持续更新。您只需要过滤掉那些您不感兴趣的集合的更新。

    【讨论】:

    • 感谢您的回复。但如果我创建上限集合,以便为新文档腾出空间,上限集合会自动删除集合中最旧的文档,而无需脚本或显式删除操作。而且我不想删除旧文件。这是我理解的……
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 2021-02-12
    • 2022-01-23
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多