GUID は常に 100% 一意ですか?
複数のスレッドで一意のままになりますか?
生成された各 GUID が一意であるとは限りませんが、一意のキーの総数 (2 128または 3.4×10 38 ) が非常に多いため、同じ数が 2 回生成される確率は非常に低くなります。たとえば、約 5×10 22 個の星を含む観測可能な宇宙を考えてみましょう。すべての星は、6.8×10 15 個の普遍的に一意の GUID を持つことができます。
ウィキペディアより。
これらは、GUID の作成方法 (.NET 用) と、適切な状況で同じ GUID を取得する方法に関するいくつかの優れた記事です。
https://ericlippert.com/2012/04/24/guid-guide-part-one/
https://ericlippert.com/2012/04/30/guid-guide-part-two/
https://ericlippert.com/2012/05/07/guid-guide-part-three/
</p>
同じ GUID 値が怖い場合は、それらを 2 つ並べてください。
Guid.NewGuid().ToString() + Guid.NewGuid().ToString();
あなたが偏執的すぎるなら、3つ入れてください。
簡単な答えはイエスです。
Raymond Chen は、GUID と、GUID の部分文字列が一意であることが保証されない理由に関する素晴らしい記事を書きました。この記事では、GUID が生成される方法と、GUID が一意性を確保するために使用するデータについて、ある程度詳しく説明しています。その理由については、ある程度詳しく説明する必要があります :-)
ちなみに、私はWindowsXPでボリュームGUIDをいじっていました。これは、3つのディスクと14のボリュームを持つ非常にあいまいなパーティションレイアウトです。
\\?\Volume{23005604-eb1b-11de-85ba-806d6172696f}\ (F:)
\\?\Volume{23005605-eb1b-11de-85ba-806d6172696f}\ (G:)
\\?\Volume{23005606-eb1b-11de-85ba-806d6172696f}\ (H:)
\\?\Volume{23005607-eb1b-11de-85ba-806d6172696f}\ (J:)
\\?\Volume{23005608-eb1b-11de-85ba-806d6172696f}\ (D:)
\\?\Volume{23005609-eb1b-11de-85ba-806d6172696f}\ (P:)
\\?\Volume{2300560b-eb1b-11de-85ba-806d6172696f}\ (K:)
\\?\Volume{2300560c-eb1b-11de-85ba-806d6172696f}\ (L:)
\\?\Volume{2300560d-eb1b-11de-85ba-806d6172696f}\ (M:)
\\?\Volume{2300560e-eb1b-11de-85ba-806d6172696f}\ (N:)
\\?\Volume{2300560f-eb1b-11de-85ba-806d6172696f}\ (O:)
\\?\Volume{23005610-eb1b-11de-85ba-806d6172696f}\ (E:)
\\?\Volume{23005611-eb1b-11de-85ba-806d6172696f}\ (R:)
| | | | |
| | | | +-- 6f = o
| | | +---- 69 = i
| | +------ 72 = r
| +-------- 61 = a
+---------- 6d = m
GUIDが非常に似ているわけではありませんが、すべてのGUIDに文字列「mario」が含まれているという事実があります。それは偶然の一致ですか、それともこの背後にある説明がありますか?
さて、 GUIDのパート4をグーグルで検索すると、ボリュームGUIDで約125.000ヒットが見つかりました。
結論:ボリュームGUIDに関しては、他のGUIDほど一意ではありません。
それは起こらないはずです。ただし、.NET の負荷が高い場合、GUID が重複する可能性があります。2 つの異なる SQL サーバーを使用する 2 つの異なる Web サーバーがあります。データをマージしたところ、1,500 万の GUID と 7 つの重複があることがわかりました。
はい、GUID は常に一意である必要があります。ハードウェアと時間の両方に基づいており、一意であることを確認するためにいくつかの追加ビットが追加されています。理論的には2つの同一のものになる可能性があると確信していますが、現実のシナリオでは非常にありそうにありません.
これは、Guids に関する Raymond Chen による素晴らしい記事です。
https://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx </p>
ガイドは統計的に一意です。2 つの異なるクライアントが同じ Guid を生成する可能性は非常に小さいです (Guid 生成コードにバグがないと仮定します)。宇宙線が原因でプロセッサに不具合が発生し、今日は 2+2=5 であると判断することを心配することもできます。
新しい GUID を割り当てる複数のスレッドは一意の値を取得しますが、呼び出している関数がスレッド セーフであることを確認する必要があります。これはどの環境にありますか?
Eric Lippert は、GUID に関する非常に興味深い一連の記事を書いています。
世界には2,30台のパーソナル コンピュータがあります (もちろん、多かれ少なかれ同じレベルのコンピューティング パワーを備えたハンドヘルド デバイスや非 PC コンピューティング デバイスも多数ありますが、それらは無視してください)。世界中のすべての PC に GUID を生成するタスクを割り当てたとします。たとえば、それぞれが毎秒2 20 個の GUID を生成できる場合、約 2 72秒 ( 150 兆年) 後に、特定の GUID との衝突が発生する可能性が非常に高くなります。そして衝突の可能性は、わずか 30 兆年後にかなり高くなります。
理論的には、いいえ、それらは一意ではありません。同じ GUID を何度も生成することができます。ただし、それが発生する可能性は非常に低いため、それらは一意であると想定できます。
可能性が非常に低いため、サーバーの自然発火やコード内の他のバグなど、他の何かについて本当に強調する必要があることを以前に読んだことがあります。つまり、それが一意であり、重複を「キャッチ」するコードを組み込まないと仮定します。発生する可能性が高い何か (つまり、他のこと) に時間を費やしてください。
GUID の有用性をブログの読者 (技術に詳しくない家族) に説明しようとしました。そこから (ウィキペディア経由)、重複する GUID を生成する確率:
それが発生する確率の実際の計算については誰も言及していないようです。
まず、128 ビット空間全体を使用できると仮定しましょう (Guid v4 は 122 ビットのみを使用します)。
n
ピックで重複を取得しない一般的な確率は次のとおりです。
(1-1/2 128 )(1-2/2 128 )...(1-(n-1)/2 128 )
2 128は よりはるかに大きいためn
、次のように近似できます。
(1-1/2 128 ) n(n-1)/2
n
は 0 よりもはるかに大きいと仮定できるため、次のように近似できます。
(1-1/2 128 ) n^2/2
これを「許容できる」確率と同一視できます。たとえば、1% としましょう。
(1-1/2 128 ) n^2/2 = 0.01
解決しn
て得られるもの:
n = sqrt(2* log 0.01 / log (1-1/2 128 ))
どの Wolfram Alpha が5.598318 × 10 19になるか
この数値を概観するために、それぞれ 4 コアの CPU を搭載した 10000 台のマシンを考えてみましょう。それぞれが 4Ghz を実行し、Guid を生成するために 10000 サイクルを費やし、他には何もしていません。その後、複製を生成するまでに約 111 年かかります。
http://www.guidgenerator.com/online-guid-generator.aspxから
GUID とは何ですか?
GUID (または UUID) は、「Globally Unique Identifier」(または「Universally Unique Identifier」) の頭字語です。これは、リソースを識別するために使用される 128 ビットの整数です。GUID という用語は通常、Microsoft テクノロジを扱う開発者によって使用されますが、UUID はそれ以外の場所で使用されます。
GUID はどれだけユニークですか?
128 ビットは十分に大きく、生成アルゴリズムは十分にユニークであるため、1 年間で 1 秒あたり 1,000,000,000 の GUID が生成された場合、重複の確率はわずか 50% になります。または、地球上のすべての人間が 6 億個の GUID を生成した場合、重複する確率は 50% しかありません。
GUID は常に 100% 一意ですか?
生成にはいくつかの方法があるため、保証されていません。ただし、同一の 2 つの GUID を作成する可能性を計算してみてください。GUID は 128 ビットなので、2 128 個の異なる GUIDがあり、既知の宇宙にある星よりもはるかに多くなります。詳細については、ウィキペディアの記事を参照してください。
MSDN :
新しい Guid の値がすべてゼロであるか、他の Guid と等しい可能性は非常に低いです。
システム クロックが適切に設定されていて、ラップ アラウンドしていない場合、および NIC に独自の MAC があり (つまり、カスタム MAC を設定していない)、NIC ベンダーが MAC をリサイクルしていない場合 (彼らは行うべきではありません)システムの GUID 生成機能が適切に実装されている場合、システムが重複する GUID を生成することはありません。
GUID を生成している地球上のすべての人がこれらのルールに従う場合、GUID はグローバルに一意になります。
実際には、規則に違反する人の数は少なく、その GUID が「逃げる」ことはほとんどありません。競合は統計的にありそうもない。
GUID が重複しています。
私は Neat Receipts デスクトップ スキャナーを使用しています。専用のデータベース ソフトウェアが付属しています。ソフトウェアにはクラウド機能への同期があり、同期時にエラーが発生し続けました。ログをざっと見てみると、素晴らしい行が明らかになりました。
"errors":[{"code":1,"message":"creator_guid: 既に取得されています","guid":"C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}
私は少し信じられませんでしたが、確かに、ローカルの networks データベースへの道を見つけ、その GUID を含むレコードを削除すると、エラーは発生しなくなりました。
したがって、事例証拠であなたの質問に答えるには、いいえ。重複可能です。しかし、それが起こった理由は偶然によるものではなく、標準的な慣行が何らかの形で守られていなかったことが原因である可能性があります. (私はそれほど幸運ではありません)しかし、私は確かに言うことはできません. それは私のソフトウェアではありません。
彼らの顧客サポートは非常に丁寧で役に立ちましたが、電話で 3 時間以上話し合っても解決策が見つからなかったため、この問題に遭遇したことはなかったに違いありません。(FWIW、私は Neat に非常に感銘を受けました。この不具合は、いくら苛立たしいものであったとしても、Neat の製品に対する私の意見を変えるものではありませんでした。)
GUID は Global Unique Identifier の略です
要約:(手がかりは名前にあります)
詳細: GUID は一意になるように設計されています。それらは、コンピューターのクロックとコンピューター自体に基づくランダムな方法を使用して計算されます。同じマシンで同じミリ秒で多くの GUID を作成している場合、一致する可能性がありますが、ほとんどすべての通常の操作では一意であると見なされます。