【问题标题】:Using MongoDB, any easy way to re-use Map/Reduce results?使用 MongoDB,有什么简单的方法可以重用 Map/Reduce 结果?
【发布时间】:2011-04-16 01:46:17
【问题描述】:

例如,在进行 Analytics 时,可能会有一个 map/reduce 运行需要 10 秒。运行后,如果其他网页可以使用该结果,则每页将节省 10 秒。

最好以某种方式缓存 map/reduce 结果。

可以在数据库中以map_reduce_result_[timestamp] 记录成功的map/reduce 运行,然后将此时间戳保存在MongoDB 中的db.run_log 中。例如,此时间戳是 UNIX 纪元时间。因此,当其他页面需要访问结果时,他们可以获取最大时间戳,然后只需查找存储在 MongoDB 中的那个结果。但这样做有点像 hack,想知道是否有更好的方法来做到这一点。

【问题讨论】:

  • 似乎是一个好方法,而不是“hackish”。去吧(不要忘记偶尔清除过期的结果)。

标签: mongodb mapreduce mongoid


【解决方案1】:

您的方法会将每个 map-reduce 结果保存在单独的集合中。如果您需要访问这些“历史”结果,这很好。

如果您只对最后一个结果感兴趣,则可以使用单个集合作为缓存。您可以使用 out 选项指定 map-reduce 作业的输出集合。

db.collection.mapReduce(map, reduce, { out: "cachedResult" });

永久的cachedResult 集合将包含结果。

正如您在the documentation 中看到的那样,map-reduce 作业在执行时仍将使用临时集合。此临时集合在完成时自动重命名为输出集合。这意味着您可以使用相同的输出集合安全地重新运行 map-reduce 作业,而不必担心在 map-reducing 时缓存无效。

【讨论】:

    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多