4

たとえば、Analyticsを実行する場合、10秒かかるmap/reduceの実行が発生する可能性があります。実行後、他のWebページがその結果を利用できる場合は、ページごとに10秒節約できます。

map/reduceの結果を何らかの方法でキャッシュしておくとよいでしょう。

成功したmap/reduceの実行をmap_reduce_result_[timestamp]dbのように記録し、このタイムスタンプをdb.run_logMongoDBに保持することができます。このタイムスタンプは、たとえばUNIXエポック時間です。したがって、他のページが結果にアクセスする必要がある場合、最大タイムスタンプを取得して、MongoDBに保存されているその結果を検索することができます。しかし、そうすることはハックのようなものであり、それを行うためのより良い方法があるかどうか疑問に思います。

4

1 に答える 1

10

あなたのアプローチは、各map-reduce結果を別々のコレクションに保存します。これらの「履歴」結果にアクセスする必要がある場合、これは問題ありません。

最後の結果のみに関心がある場合は、単一のコレクションを使用してキャッシュとして機能させることができます。オプションを使用して、map-reduceジョブの出力コレクションを指定できoutます。

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

その後、永続的なcachedResultコレクションに結果が含まれます。

ドキュメントで読むことができるように、map-reduceジョブは実行中に一時的なコレクションを引き続き使用します。この一時的なコレクションは、完了時に出力コレクションにアトミックに名前が変更されます。これは、map- reduced中に無効なキャッシュを心配することなく、同じ出力コレクションを使用してmap-reduceジョブを安全に再実行できることを意味します。

于 2010-09-23T06:48:04.147 に答える