5

数学的には、.NET Frameworkの組み込みメソッドを使用して生成された2つのランダムなGUIDでさえ同一である可能性があると思いますが、数百または数千を生成した場合、それらが衝突する可能性はおおよそどのくらいですか?

世界中のWindowsのコピーごとに1つ生成した場合、それらは衝突しますか?

私が尋ねる理由は、私がたくさんのオブジェクトを作成し、いくつかも破壊するプログラムを持っているからです。そして、それらのオブジェクト(破壊されたものを含む)のいずれかが同一のGUIDを持つ可能性について疑問に思っています。

4

7 に答える 7

7

〜3E38の可能なGUID値があります。しかし、Birthday Paradoxは、重複するGUIDを生成する確率を50/50に減らして〜1E19にします。まだ膨大な数ですが、最初に隕石の衝突によってマシンが破壊される可能性と比較すると、システムクロックを使用して、重複が発生しないようにします。

多くの大規模でミッションクリティカルなdbaseアプリは、テーブルの主キーとしてGUIDを使用します。彼らの先導に従うことを躊躇しないでください。

于 2010-04-11T18:07:12.357 に答える
5

GUIDには、に基づくコンポーネントがあります

  • 時間(システム時計)

  • スペース(システムMACアドレス)

  • 乱数

したがって、同じ時間に世界中のマシンごとに1つが生成される場合、それらはMACと乱数によって異なります。

ここに役立つリンクがあります。http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

于 2010-04-11T17:41:48.413 に答える
1

GUIDジェネレーターの実装の内部の詳細を知らずにチャンスを計算することは困難です。

組み合わせ論を使用して数値を取得できますが、それは組み合わせが同じように可能性が高いと仮定するのに役立ちます。したがって、実装に関する統計的な知識がなければ、本当の可能性を判断するのは困難です。

Midhatが意味すること(私が彼を正しく理解している場合)とは対照的に、GUIDの衝突が発生する可能性があります。組み込みの乱数ジェネレーターは通常、タイムスタンプベースのシードを使用して実装されます。MACアドレスは、多くの状況で上書きされる可能性があるため、本質的に一意ではありません(少なくとも、私が知っている場合には、MACアドレスは上書きされます)。2つのGUIDジェネレーターが同じ入力を取得し、同じ出力を生成する可能性があります。

GUIDは128ビット長であるため、「すべての人が使用するのに十分です」が、衝突が発生しないことを保証するものではありません。

于 2010-04-11T17:51:08.247 に答える
1

過去25年間、RPCとCOM(GUIDとUUIDが重要)で作業し、GUIDが一意の行識別子として使用される分散データベースで作業してきましたが、単一のマシンで生成されたか、単一のマシンで生成されたかにかかわらず、衝突の問題に遭遇したことはありません。別のマシン。これに関するMSDNのもう1つの興味深い点は、ROWIDとして、オブジェクトとしてよりもはるかに長生きすることです 。http ://weblogs.asp.net/wwright/archive/2007/11/04/the-gospel-of-the-guid-and -why-it-matters.aspx

于 2010-04-11T18:21:45.880 に答える
1

これはあなたがまったく気にするべきことではありません。これは、機能している可用性ヒューリスティックです。それはあなたが知っていて認識している「リスク」なので、あなたはそれを気にかけたいのです。しかし、他にも何百万倍も可能性が高いリスクが他にもたくさんありますが、それでも心配する必要はありません。素晴らしいProGitの本は、それを最もよく言っていると思います。

プログラミングチームのすべてのメンバーが、同じ夜に無関係の事件でオオカミに襲われて殺される可能性が高くなります。

それが遠い可能性でさえあるためには、あなたは数百万または数十億を生み出さなければならないでしょう。

于 2010-04-20T07:31:53.760 に答える
0

本当に長い時間がかかります!

于 2010-04-11T17:42:32.360 に答える
0

Midhatの正解に追加するために、システムにネットワークカードがインストールされていない(したがってMACアドレスがない)状況についてのEricLippertのブログからの引用を次に示します。

(ネットワークカードを持たないマシンは、「潜在的に一意ではないことがわかっている」範囲にある特別なGUIDを生成します。)

于 2010-04-11T17:49:52.093 に答える