私は、何千ものJPEG画像をユーザーに提供することになっているasp.netWebアプリを開発しています。私の専用サーバーにはJPEGファイルが含まれており、JPEGメタデータを保存するためにMongoDBをホストしています。
Sample object in a collection named **JPEG_123** (this collection has 1 million such documents and each document has _id indexed)
{
"_id" : "20121210185015000", //YYYYMMDDhhmmsslll
"Url" : "http:...",
"CameraId" : 123
}
Webメソッドを使用してMongoDBにクエリを実行しています。コレクションJPEG_123に正規表現(例: "^ 2012121018 * /)を使用してUtcフィールドをクエリし、1時間のドキュメントを取得します。MongoCursorが指す約5000レコードが返され、MongoShellではこのデータを取得するのに3〜4ミリ秒の時間が表示されます。 。
Q. MongoCursorを介してASP.NETで最良かつ迅速な方法で、MongoDBからこれらのドキュメントを繰り返し取得するにはどうすればよいですか?MongoCursorの属性のようなLIMIT、BATCHSIZE、およびNEXTを最適に使用します。
私はこのようなことをしようとしています:
- ASP.NETからMongoDBで上記の検索クエリを実行します
- 最初にネットワーク経由で最初の500ドキュメントのみをフェッチし、残りの4500をRAMに保持します
- 後続の9回の反復でそのMongoCursor内の残りの4500ドキュメントをフェッチします(毎回500を取得します)
- または、ネットワークを介してこのデータを送信するこのプロセスを高速化するその他の可能性
私の懸念
ASP.NETからMongnoDBにクエリを実行すると、MongoDBは5000レコードすべてをRAMにロードしますが、5000レコードすべてをASP.NETに返さないということですか?
上記のクエリを発行すると、MongoCursorが指すレコードの総数が即座に返されます。MongoCursorのすべてのドキュメントをループすると、約20〜30秒かかります。つまり、MongoDBは、アプリケーションで使用されたときにデータを返しますか?