ホームページ > バックエンド開発 > Golang > 大規模な結果セットに対して mgo.v2 を使用して MongoDB に効率的なページングを実装するにはどうすればよいですか?

大規模な結果セットに対して mgo.v2 を使用して MongoDB に効率的なページングを実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-30 02:12:11
オリジナル
630 人が閲覧しました

How Can I Implement Efficient Paging in MongoDB with mgo.v2 for Large Result Sets?

カスタム カーソル管理で mgo を使用した MongoDB での効率的なページング

問題:

mgo の間.v2 は組み込みのページング メソッド (Query.Skip() およびQuery.Limit()) を使用すると、最初の x 個のドキュメント (Skip() によって決定) をスキップする前にすべてのドキュメントを反復処理する必要があるため、大きな結果リストの場合は非効率になります。

解決策:

MongoDB は、目的の結果にジャンプするためのcursor.min() を提供し、処理されるドキュメントの数を減らします。ただし、mgo.v2 には、cursor.min() を指定するためのネイティブ サポートがありません。

Database.Run() および Find コマンド:

cursor.min() を利用するにはネイティブ サポートがない場合は、Database.Run() を使用して、カスタム クエリで検索コマンドを実行できます。ここで、必要な開始インデックスを示す min 引数を指定します。エントリ.

カーソル データのエンコード:

クエリの実行後、結果の最初のバッチからカーソル データを取得する必要があります。このデータを効率的に保存および送信するには、 bson.Marshal() を Base64 エンコーディングと組み合わせて使用​​し、Web セーフなカーソル文字列を生成します。

カーソル管理:

ページ間のカーソルを管理するには、base64 エンコーディングと bson エンコーディングをそれぞれ使用してカーソルをデコードおよび再エンコードできます。これにより、中断したところからクエリを再開できるようになります。

github.com/icza/minquery を使用する:

あるいは、minquery パッケージを使用することもできます。カーソル指定を使用して MongoDB 検索コマンドを設定および実行するためのラッパーを提供します。ページ間のカーソル管理プロセスが簡素化されます。

コード スニペット:

カスタム カーソル管理 (手動アプローチ):

query := mgo.Query{
    Limit: 10,
}

if min != nil {
    query = query.Skip(1).Min(min)
}
ログイン後にコピー

minquery パッケージアプローチ:

query := minquery.New().
    Cursor(cursor).
    Limit(10)
ログイン後にコピー

以上が大規模な結果セットに対して mgo.v2 を使用して MongoDB に効率的なページングを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート