2011-10-17 7 views
0

私はORM(MongoEngine)を介して大きなMongoドキュメントのリストを返すビューを持っています。コレクションに対するORMクエリは、いくつかのレベル(順序、制限、オフセット、クエリフィルタなど)によって異なります。ただし、基礎となるデータは定期的に更新されません。Mongo - 良いPythonキャッシングライブラリ/戦略

データを表示するために、ビューはMongoドキュメントをPythonic Dictオブジェクトに変換します。

キャッシングの目的で、MongoEngine ORMメソッドに対して組み込みのhash()関数を呼び出すだけでいいですか?言い換えれば、

key = hash('Document.objects.filter(user_id__gt=5)') 
value = Document.objects.filter(user_id__gt=5) 

私は、memcacheバックエンドでDjangoキャッシングAPIを使用します。

これはスレッドセーフではないようですが、それは大きな問題です。私の大きな心配は、クエリのバリエーションごとにMemcacheの読み書きのオーバーヘッドです。最も一般的なクエリに限定することができます。

私は最大の疑問は、この種の低レベル機能のためにMongoがmemcacheを必要としているかどうかということです。

答えて

2

MongoDBはメモリマップされたファイルを使用し、基礎となるOSはディスクへのページングとディスクからのページングを処理します。余分なRAMがある場合は、MongoDBでそれを使用してスループットを最大化し、コードの複雑さを減らしてください。

+0

ありがとうHTR。私たちは、大きなマップリダクションを非同期的に実行する特定の問題を抱えています。これは、我々が重く読んだコレクションに出力します。コレクションへの書き込みのmapreduceプロセスは、読み取りを遅くするロックを適用するように見えます。それはスプリットキャッシング/モンゴーシステムの背後にある私たちのロジックでした。 – Ben