1

私はMongoIdを使用して、私が理解した質問に対する与えられた答えを読んでいます

クエリをキャッシュしません

以下のクエリを実行すると

PartPriceRecord.destroy_all

PartPriceRecord.count() ==> 31721

どうすればそれが可能になるか、すべてのレコードを削除するだけです。これにより、mongoが特定のクエリをキャッシュしているような気がします

私のモンゴイドクエリログでは、2つの削除クエリが動作するたびに見ることができます

MONGODB (0ms) decisiv_staging['system.indexes'].insert([{:name=>"part_number_1", :ns=>"decisiv_staging.part_price_records", :key=>{"part_number"=>1}, :unique=>true}])
MONGODB (0ms) decisiv_staging['part_price_records'].remove({:_id=>BSON::ObjectId('4fa39b35edd7f4306b0042bf')})

インデックスが作成され、レコードが削除されていることを示します。

モンゴがクエリをキャッシュしている理由モンゴイドからモンゴキャッシュをクリアする方法はありますかモンゴがクエリをキャッシュしている場合

4

1 に答える 1

1

警告: 私はモンゴイド ユーザーではありません。

では、mongo がクエリをキャッシュしている理由

Mongo 自体はそのようなキャッシングを行いません。

データベースで実行されたクエリを見ると、次のようになります。

$ mongodb viren
> db.setProfilingLevel(0); 
> db.system.profile.drop();  
> db.setProfilingLevel(2);

次に、コードを実行すると、ログに次のようなものが表示されます。

> db.system.profile.find()
{ "ts" : ISODate("2012-05-09T08:39:21.657Z"), "op" : "insert", "ns" : "viren.part_price_records", "millis" : 0, "client" : "127.0.0.1", "user" : "" }
{ "ts" : ISODate("2012-05-09T08:39:26.553Z"), "op" : "remove", "ns" : "viern.part_price_records", "query" : { }, "millis" : 0, "client" : "127.0.0.1", "user" : "" }

データベースを直接見ると、発行されたクエリと、キャッシュがあるかどうかを正確に知る/理解することができます-どこにあるか(データベース自体にはありません)。

ただし、上記の質問で示したクエリ ログとの大きな.remove({:_id=>BSON::ObjectId('4fa39b35edd7f4306b0042bf')})違いは、最大で 1 つのオブジェクトを削除することです。上記の条件 ( {}) はコレクションを切り捨てます。

destroy allのドキュメントを見ると、削除された各行でコールバックが実行されます。これは、おそらく一度に 1 つずつ削除することを意味します (30k 行ではかなりの時間がかかります)。delete allを使用すると、代わりにクエリを直接発行してすべての行を削除する ( と仮定しますdb.part_price_records.remove({}))。コールバックを破棄する必要がある場合は、コードが削除する行を 1 つだけ見つけたように見える理由、または他の既存の行の削除を中止しているコールバックを調査する必要があります。

于 2012-05-09T08:48:06.600 に答える