4

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

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

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

4

1 回答 1

10

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

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

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

然后永久cachedResult集合将包含结果。

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

于 2010-09-23T06:48:04.147 回答