例如,在进行分析时,可能需要 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/