gpt4 book ai didi

Mongodb:在 RAM 中保存经常写入的集合

转载 作者:可可西里 更新时间:2023-11-01 10:04:41 24 4
gpt4 key购买 nike

我正在从流式 API 收集数据,我想创建一个实时分析仪表板。该仪表板将显示一个简单的时间序列,绘制每小时的文档数量。我想知道我目前的方法是否最优。

在以下示例中,会为流中的每个新文档触发 on_data。

# Mongo collections.
records = db.records
stats = db.records.statistics

on_data(self, data):
# Create a json document from data.
document = simplejson.loads(data)

# Insert the new document into records.
records.insert(document)

# Update a counter in records.statistics for the hour this document belongs to.
stats.update({ 'hour': document['hour'] }, { '$inc': { document['hour']: 1 } }, upsert=True)

以上作品。我得到了一个漂亮的图表,其中绘制了每小时的文档数量。我的问题是这种方法是否最优。我正在为每个文档发出两个 Mongo 请求。第一个插入文档,第二个更新计数器。该流每秒发送大约 10 个新文档。

是否有例如告诉 Mongo 将 db.records.statistics 保存在 RAM 中?我想这会大大减少我服务器上的磁盘访问。

最佳答案

MongoDB 使用内存映射来处理文件 I/O,因此它基本上将所有数据视为已经在 RAM 中,并让操作系统找出细节。简而言之,你不能强制你的收藏在内存中,但如果操作系统能很好地处理事情,那么重要的东西就是。查看此文档链接,了解有关 mongo 内存模型以及如何优化操作系统配置以最适合您的用例的更多信息:http://docs.mongodb.org/manual/faq/storage/

但要具体回答您的问题:您应该没问题。在任何情况下,每秒 10 或 20 次写入都不应成为磁盘瓶颈(假设您在非古老的硬件上运行)。我建议的一件事是在统计信息中建立一个超过“小时”的索引,如果您还没有这样做的话,可以使您的更新更快地找到文档。

关于Mongodb:在 RAM 中保存经常写入的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18858757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com