我使用mongo-db进行实时分析,我每天获得500万个数据点,未来至少会增加到1000万个.
我的问题是:
上限集合是循环的,所以我的数据在到达上限后会被覆盖,我不想丢失这些数据.
那么我应该遵循什么方法来保留旧数据并避免这些数据被覆盖但仍然可以使用上限,因为它们很快?
我正在考虑像这样的算法:
将当前集合重命名为old并删除当前集合.
追加旧的搜索友好(没有上限)集合
Gates VP.. 5
我想你可能会以错误的方式解决这个问题.为什么不在每个时间段创建一个新的集合,而不是试图"破解"上限集合?
因此,如果您每天可以处理5-10M个数据点,那么只需创建一个集合,并将该日作为名称的一部分.你会得到像db.data20101001
11月1日那样的东西,然后db.data20101002
是11月2日.
当您停止写入旧数据时,数据将"掉落"内存并停止使用RAM.通过相同的衡量,当前日(也许可能是前一天)的索引可能总是在RAM中,因此插入将继续快速,同时仍保持历史记录.
此解决方案所需的额外步骤:
您必须在代码中编写一些逻辑以插入到正确的日期(请注意新集合会自行创建,因此这非常简单)
您需要设置一个删除旧数据的例程,通常可以追溯到N天,然后执行此操作:db.data20100901.drop()
.您不会回收空间,但Mongo将开始使用"旧"数据文件.
因此,您可以通过选择活动天数来有效管理收藏的大小.
我想你可能会以错误的方式解决这个问题.为什么不在每个时间段创建一个新的集合,而不是试图"破解"上限集合?
因此,如果您每天可以处理5-10M个数据点,那么只需创建一个集合,并将该日作为名称的一部分.你会得到像db.data20101001
11月1日那样的东西,然后db.data20101002
是11月2日.
当您停止写入旧数据时,数据将"掉落"内存并停止使用RAM.通过相同的衡量,当前日(也许可能是前一天)的索引可能总是在RAM中,因此插入将继续快速,同时仍保持历史记录.
此解决方案所需的额外步骤:
您必须在代码中编写一些逻辑以插入到正确的日期(请注意新集合会自行创建,因此这非常简单)
您需要设置一个删除旧数据的例程,通常可以追溯到N天,然后执行此操作:db.data20100901.drop()
.您不会回收空间,但Mongo将开始使用"旧"数据文件.
因此,您可以通过选择活动天数来有效管理收藏的大小.