mongodb作为循环数据库

时间:2010-11-01 16:23:21

标签: c ruby mongodb

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

我的问题是:

上限集合是循环的,因此我的数据将被覆盖 它到达上限,我不想丢失这些数据。

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

我正在考虑像这样的算法:

  • 将当前集合重命名为old并放弃当前。
  • 将旧版附加到搜索友好(未加盖)的集合

1 个答案:

答案 0 :(得分:5)

我认为你可能会以错误的方式解决这个问题。为什么不为每个时间段创建一个新的集合,而不是试图“破解”上限集合?

因此,如果您每天可以处理5-10M个数据点,那么只需创建一个集合,并将该日作为名称的一部分。您将获得11月1日db.data20101001和11月2日db.data20101002之类的内容。

当您停止写入旧数据时,数据会“掉落”内存并停止使用RAM。通过相同的衡量标准,当前日(也许可能是前一天)的索引可能总是在RAM中,因此插入将继续保持快速,同时仍保持历史记录。

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

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

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