如何通过平均旧数据来减少Mongo数据库

时间:2011-02-25 10:09:58

标签: mongodb database nosql

我有一个mongodb用于测量,每次测量都有一个文件。每个文档看起来像:

{
 timestamp : 123
 value     : 123
 meta1     : something
 meta2     : something
}

我每秒都会从多个来源获得测量数据,因此db很快就会变得非常大。我有兴趣保持最新信息的读取频率,但旧数据,我想定期平均以节省空间,并使数据库更快一点。

1.Mongo中最好的方法是什么?

2.考虑到不同测量的模式不同,有一个更好的数据库,固定格式不能很好地工作。 RRD也不是一个选项,因为我需要动态查询功能。?

3 个答案:

答案 0 :(得分:4)

<强> 1。什么是mongo的最佳方法?
  使用capped collections来记录日志等用例。另一种方法是创建一个“后台进程”,它将从集合中移动旧数据。

2.考虑到不同测量的模式不同,有一个更好的数据库,固定格式不能很好地工作。 RRD也不是一个选项,因为我需要动态查询功能。
 Mongodb非常适合这里。

<强>更新 另一个方法是将每个数据项存储两次:首先在上限集合中(并使用此集合进行查询)。并创建另一个集合(甚至是另一个logdb),仅用于记录您的事件。

答案 1 :(得分:3)

感谢您的投入。

我想我会尝试在不同的时间范围内使用存储桶。所以,我将创建对应于1秒,1分钟,15分钟的3个存储,然后通过每隔一段时间运行的手动作业来管理聚合,这将压缩/平均值,删除不需要的东西等等......

答案 2 :(得分:2)

  1. 我不确定最好的方法,但一个简单的方法就是让一个cron作业删除所有早于给定时间戳(your_time = now - some_time)的文档。

    db.docs.remove({ timestamp : {'$lte' : your_time}})

  2. 鉴于您需要一个允许您执行动态查询的无模式数据库,mondogb似乎非常适合。