mongodb - 使用 MongoDB,有什么简单的方法可以重用 Map/Reduce 结果?

标签 mongodb mapreduce mongoid

例如,在进行分析时,可能需要 10 秒的 map/reduce 运行。运行后,如果其他网页可以利用该结果,那么每页将节省 10 秒。

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

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

最佳答案

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

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

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

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

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

关于mongodb - 使用 MongoDB,有什么简单的方法可以重用 Map/Reduce 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3775288/

相关文章:

mongodb - 无法使用命令写入模式错误,降级到兼容模式

ruby - mongoid 文档 to_json 包括所有嵌入的文档,每个文档都没有 ':include'

ruby-on-rails - bool 值不起作用的Mongoid

ruby-on-rails - 将 Activerecord 数据库迁移到 Mongoid

arrays - 在mongodb中删除数组中的数组

MongoDB killOp() 没有终止操作。我该怎么办?

javascript - 对路径 '_id' 执行更新将修改不可变字段 '_id'

python - mrjob:示例如何自动知道如何在文本文件中查找行?

java - Hadoop如何在多个数据节点之间分配数据和Mapreduce任务

javascript - Riak 在 MapReduce 查询中失败。使用哪种配置?