【问题标题】:How can I reduce Mongo db by averaging out old data如何通过平均旧数据来减少 Mongo db
【发布时间】:2011-02-25 10:09:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: mongodb database nosql


    【解决方案1】:

    1. mongo 中最好的方法是什么?
    capped collections 用于记录等用例。另一种方法是创建一个“后台进程”,将旧数据从集合中移出。

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

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

    【讨论】:

    • +1 将上限集合作为潜在的,但在 OP 的情况下可能是后台进程。再加上 MongoDB 非常适合
    • 封顶收藏很棒,但我认为它们不适合我的需要。我想保留数据,但通过将 3 个文档中的值平均到单个文档中来减少数据。
    • 可能的两种方式: 1. 删除旧数据的后台进程。 2.在capped collection和log collection中存储两次数据。
    • @Duncan:如果您需要对旧数据进行平均,然后删除该旧数据,则可能值得为该平均编写一个 MapReduce,然后让后台进程在删除旧数据之前先触发该 MapReduce .所以做 MapReduce 的能力表明 MongoDB 是一个不错的选择。
    • 您可能会利用新的 Mongodb 1.8 MapReduce 功能来减少事物。几周前我写了一篇文章,涵盖了它们:blog.evilmonkeylabs.com/2011/01/27/MongoDB-1_8-MapReduce
    【解决方案2】:

    感谢您的意见。

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

    【讨论】:

    • 一般来说这是最简单的方法。每个大时间范围(小时/天)构建一个文档,然后将 $push / $inc 数据放入该文档。以这种方式使旧数据过期更容易,坦率地说,它更容易查询(返回 24 小时文档,而不是 86400 个“第二”文档)。由于避免重复数据,它还节省空间。仅供参考,为了节省更多空间,请考虑缩小您的字段名称。用“ts”代替“timestamp”,用“v”代替“value”等
    【解决方案3】:
    1. 我不确定最好的方法,但一个简单的方法是让一个 cron 作业删除所有早于给定时间戳 (your_time = now - some_time) 的文档。

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

    2. 鉴于您需要一个允许您执行动态查询的无模式数据库,mondogb 似乎是一个不错的选择。

    【讨论】:

    • 正如上面的评论,我想将 3 个文档平均到 1 个新文档中,而不是完全删除它们。我认为 cron 工作肯定是前进的方向(或类似的东西)。
    • 这里有什么问题?只需创建一些进程并将其配置为每天运行或根据需要运行并合并/删除/移动/更新您的收藏。
    • @Duncan 好的,因此 cron 作业将计算平均文档(map/reduce),将其添加到集合中并删除计算中使用的文档。
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多