0

大量のドキュメントを含む Web アプリがあります。ユーザーは ID (有効な MongoId / ObjectId) を入力できますが、ユーザーが入力しない場合は、最後の ID でオブジェクトを取得する必要があります。

最後のオブジェクトを検索する速度が気になります。私は現在、次のようにしています:

db.docs.find({"status": 1}).sort({"_id": -1}).limit(1);
//Or in php:
$docs->find(array('status' => 1))->sort(array('_id' => -1))->limit(1)->getNext();

これは少し遅くないですか?最初に、ステータス 1 のすべてのドキュメントを探してから、並べ替えてから制限します。ステータス 1 の最後のドキュメントを取得するためのより良い方法はありますか?

4

2 に答える 2

2

このパフォーマンスを向上させるには、おそらく にインデックスを追加する必要があります{ status: 1, _id: -1 }

findOnefind の代わりに limit を使用して、構文を簡素化することもできます。

db.docs.findOne({"status": 1}).sort({"_id": -1});
于 2012-09-19T15:46:01.177 に答える
1

おそらく、別の値を別のテーブルに格納するか、メモリ内キャッシュに格納して、システムが持つ最高の ID 値を status=1 として示します。データベースにオブジェクトを挿入/更新するときに、status=1 のオブジェクトの ID 値を現在キャッシュされている ID 値と比較し、値が大きい場合に更新するために、少しロジックを追加する必要があります。このキャッシュされた値を使用して、最新のファイルに直接アクセスできます。

find.sort.limit少し扱いに​​くいですが、オブジェクトの数が増えるにつれて、現在実行している操作よりもはるかに優れたパフォーマンスを発揮するでしょう。

于 2012-09-19T15:41:19.580 に答える