我有一个mongodb用于测量,每次测量都有一个文件。每个文档看起来像:
{
timestamp : 123
value : 123
meta1 : something
meta2 : something
}
我每秒都会从多个来源获得测量数据,因此db很快就会变得非常大。我有兴趣保持最新信息的读取频率,但旧数据,我想定期平均以节省空间,并使数据库更快一点。
1.Mongo中最好的方法是什么?
2.考虑到不同测量的模式不同,有一个更好的数据库,固定格式不能很好地工作。 RRD也不是一个选项,因为我需要动态查询功能。?
答案 0 :(得分:4)
<强> 1。什么是mongo的最佳方法?
使用capped collections来记录日志等用例。另一种方法是创建一个“后台进程”,它将从集合中移动旧数据。
2.考虑到不同测量的模式不同,有一个更好的数据库,固定格式不能很好地工作。 RRD也不是一个选项,因为我需要动态查询功能。
Mongodb非常适合这里。
<强>更新强> 另一个方法是将每个数据项存储两次:首先在上限集合中(并使用此集合进行查询)。并创建另一个集合(甚至是另一个logdb),仅用于记录您的事件。
答案 1 :(得分:3)
感谢您的投入。
我想我会尝试在不同的时间范围内使用存储桶。所以,我将创建对应于1秒,1分钟,15分钟的3个存储,然后通过每隔一段时间运行的手动作业来管理聚合,这将压缩/平均值,删除不需要的东西等等......
答案 2 :(得分:2)
我不确定最好的方法,但一个简单的方法就是让一个cron作业删除所有早于给定时间戳(your_time = now - some_time
)的文档。
db.docs.remove({ timestamp : {'$lte' : your_time}})
鉴于您需要一个允许您执行动态查询的无模式数据库,mondogb似乎非常适合。