14

すべてのドキュメントの _id フィールドに格納される自動生成された BSON ID は GUID ですか? ドキュメントには「最も可能性が高い」と書かれているため、少し混乱しています。一意であることが保証されていない ID を使用するのはなぜですか?

4

4 に答える 4

7

その一意性は確率に基づいています。@mattexxの回答とは異なり:

MongoDB は時間を節約するために一意性を強制しないため、一意であることは「保証」されません。

MongoDB は に一意性を強制します。ObjectId実際には、_idフィールドに一意のインデックスがあります。時間の節約についてObjectId言えば、MongoDB が書き込みを確認せず、99% の確率でクライアントが確認応答 (ObjectIdsクライアント側で生成されます)。

それらはGUIDではありませんが、@Asyaが言うように、高レベルの一意性が保証されています。

時間が逆行しない限り、99% の確率で永遠に唯一無二の存在です。さて、@Devesh が言うように、1 兆分の 1 (? は計算していません) の確率で GUID が複製される可能性がありますが、繰り返しになりますが、すぐにその確率に達するとは思いません。

于 2013-04-23T07:14:11.867 に答える
4

ほとんどの要件で一意であり、タイムスタンプ、マシンの一意の識別子 (マシン ホストのハッシュ)、プロセス識別子、および最後に増分番号で構成されます。http://docs.mongodb.org/manual/reference/object-id/

于 2013-04-23T05:37:36.680 に答える
2

ID の衝突の可能性は、理論的にはゼロに近いため、一般的な Web アプリで想定できます。多くの実際のシステム (Mongo であろうとなかろうと) は、この GUID のプロパティに依存していますが、安全性やミッション クリティカルなシステムにとっては適切な仮定ではありません。

実際には、設定ミスやサードパーティのライブラリのバグがあるとうまくいかないシナリオが実際にあります。それらは概念を排除すべきではありませんが、それらのリスクを認識し、可能な限り回避することが重要です.

ここでは、衝突を引き起こす可能性のある実際の問題について、いくつかの適切な分析を行います。特に:

一部の Mongo ドライバーは、カウンター バイトの数値をインクリメントする代わりに乱数を使用します。これらの場合、1/16,777,216 の確率で一意でない ID が生成されますが、これらの 2 つの ID が同じ秒に生成された場合 (つまり、ID の時間セクションが次の秒に更新される前) に限ります。マシン、同じプロセスで。

于 2016-09-11T08:42:15.900 に答える
0

ObjectId はドキュメントhereで説明されています。MongoDB は時間を節約するために一意性を強制しないため、一意であることは「保証」されません。複雑な生成アルゴリズムが同じデータストアで 2 つの同一の ObjectId を生成することはおそらくないだろうと単純に信じています。したがって、技術的には GUID ではありませんが、ほぼ同じです。

于 2013-04-23T05:38:33.920 に答える