c - mongodb 作为循环数据库

标签 c ruby mongodb

<分区>

我正在使用 mongo-db 进行实时分析,我得到了 500 万 每天的数据点, future 将增加到 1000 万 至少。

我的问题是:

Capped 集合是循环的,所以我的数据将在之后被覆盖 它达到了上限,我不想丢失这些数据。

那么我应该遵循什么方法来保留旧数据并避免这些数据被覆盖但仍然能够使用上限,因为它们很快?

我在用这样的算法思考:

  • 将当前集合重命名为旧集合并删除当前集合。
  • 将 old 附加到搜索友好(无上限)集合

最佳答案

我认为您可能采用了错误的方式。与其尝试“破解”上限集合,不如为每个时间段创建一个新集合?

因此,如果您每天可以处理 5-10M 数据点,那么只需创建一个以日期作为名称一部分的集合。您会在 11 月 1 日得到类似 db.data20101001 的信息,然后在 11 月 2 日得到类似 db.data20101002 的信息。

当您停止写入旧数据时,这些数据将从内存中“掉落”并停止使用 RAM。按照相同的衡量标准,当天(可能还有前一天)的索引可能始终在 RAM 中,因此插入将继续快速进行,同时仍保持历史记录。

此解决方案所需的额外步骤:

  • 您必须在代码中编写一些逻辑以插入正确的日期(注意新集合会自行创建,所以这非常简单)
  • 您需要设置删除旧数据的例程,通常是 N 天前的数据并执行此操作:db.data20100901.drop()。您不会回收空间,但 Mongo 将开始使用“较旧”的数据文件。

因此,您可以通过选择活跃天数来有效地管理收藏的大小。

关于c - mongodb 作为循环数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070833/

相关文章:

mongodb - 停止 : Unknown instance mongodb (Ubuntu)

php - MongoDB PHP - 限制和跳过不起作用

c - 如何更正 C 中的大数组?

c++ - bool 表达式习语中的这个字符串文字是什么?

ruby - 如何使用 net/http 在 ruby​​ 中验证 SSL 证书链

ruby - "Personal"ruby​​ 中的方法

mongodb - Mongoose model.pre ('save' ), isModified, bcrypt

C 调用约定 : who cleans the stack in variadic functions vs normal functions?

c++ - 声明一个没有 const 的 C 风格的字符串是不是很糟糕?如果是这样,为什么?

Ruby - 使用 YAML 解析哈希的字符串 - 如果哈希输入原始并强制转换为字符串而不是作为字符串输入则出错