2

クラスター環境 (多くのステートレス Java ベースのアプリ サーバー + Mongodb) で範囲 (0-100.000) 内の乱数を生成する必要があるため、すべてのユーザー リクエストは一意の番号を取得し、次のいくつかのリクエストでそれを維持します。

私が理解しているように、2 つのオプションがあります。2. Redis を使用します。これはアトミックであり、カウンターをサポートします。3. アイデアはありますか? UUID を使用して範囲を設定しても安全ですか? 4.ヘーゼルキャスト?

他にも?

ありがとう

4

1 に答える 1

2

既存の MongoDB インフラストラクチャを活用し、MongoDB の findAndModify コマンドを使用して、アトミックなインクリメントと取得操作を実行します。

シェルの場合、コマンドは次のようになります。

var result = db.ids.findAndModify( {
                           query: { _id: "counter" },
                           sort: { rating: 1 },
                           new : true,
                           update: { $inc: { counter: 1 } },
                           upsert : true
                         } );

「new : true」は更新後のドキュメントを返します。Upsert は、ドキュメントが欠落している場合に作成します。

10genでサポートされているドライバー非同期ドライバーの両方に、検索コマンドと変更コマンドのヘルパー メソッド/ビルダーが含まれています。

于 2013-02-18T04:16:15.447 に答える