132

衝突の可能性はわずかですが、たとえば1000個のGUIDのバッチを生成した場合、それぞれのテストを保存するために、それらがすべて一意であると想定しても安全ですか?

ボーナス質問

GUIDの一意性をテストする最適な方法は?ブルームフィルターかも?

4

7 に答える 7

373

はい、できます。GUIDは128ビット長であるため、衝突の可能性はわずかにありますが、「分」という言葉は十分に強力ではありません。GUIDが非常に多いため、数兆個のGUIDをランダムに生成した場合でも、衝突が1回でも発生するよりも隕石に見舞われる可能性が高くなります(Wikipediaから)。また、ランダムに生成するのではなく、たとえばMACアドレスとタイムスタンプのアルゴリズムを使用している場合、MACアドレスはコンピューター間で一意であり、タイムスタンプはコンピューター間で一意であるため、それらも一意になります。コンピューター。

編集1:ボーナスの質問に答えるために、一連のGUIDの一意性をテストする最適な方法は、それらがすべて一意であると想定することです。なんで?なぜなら、生成しているGUIDの数を考えると、GUIDの衝突の確率は、宇宙線がコンピューターのメモリを少し反転させて、気になる「正確な」アルゴリズムによって与えられた答えを台無しにする確率よりも小さいからです。走る。(計算については、このStackOverflowの回答を参照してください。)

そこには膨大な数のGUIDがあります。ダグラス・アダムズのギャラクシーへのヒッチハイカーのガイドを引用するには:

「宇宙は大きいです。本当に大きいです。それがどれほど巨大で驚くほど大きいか信じられないでしょう。つまり、化学者への道のりは遠いと思うかもしれませんが、それは宇宙へのピーナッツにすぎません。 、 聞く…"

また、宇宙には約7×10の22の星があり、2 128のGUIDのすぐ下にあるため、すべての星に約4.86×10 15(ほぼ5兆)のGUIDがあります。それらの星のすべてが私たちのような人口が繁栄している世界を持っていた場合、すべての星の周りに、これまでに住んでいたすべての人間またはエイリアンは、45,000以上のGUIDを受け取る権利があります。宇宙のすべての星の歴史上のすべての人のために。GUIDスペースは、宇宙全体のサイズと同じレベルの巨大さです。心配する必要はありません。

編集2:これを反映して:すごい。これが何を意味するのか自分自身に気づいていませんでした。GUIDスペースは理解できないほど巨大です。私はそれに畏敬の念を抱いています。)

于 2010-06-04T20:38:10.747 に答える
44

簡単な答え:実用的な目的のために、はい。

ただし、誕生日のパラドックスを考慮する必要があります。

いくつかの代表的な衝突確率を計算しました。ウィキペディアの記事で指定されている122ビットのUUIDの場合、少なくとも2.71492e18UUIDを生成すると、衝突の確率は1/2になります。10 ^ 19 UUIDの場合、確率は0.999918です。10 ^ 17 UUIDの場合、0.000939953。

比較のためのいくつかの数字はウィキペディアで見つけることができます。したがって、生きてきた各人間、観測可能な宇宙の各銀河、海の各魚、地球上の個々のアリにUUIDを安全に割り当てることができます。ただし、人類が1年間に生成するトランジスタごと、地球上の昆虫ごと、地球上の砂粒ごと、観測可能な宇宙内の星ごと、またはそれ以上のものに対してUUIDを生成する場合、衝突はほぼ確実です。

1秒あたり10億のUUIDを生成する場合、10%の衝突確率を得るには約36年かかります。

最終的には、人類の歴史の中で生成されたUUIDのセット間で衝突が発生する可能性があります。それでも、衝突したUUIDが同じ目的で使用される可能性はほとんどないため、実際には問題はありません。

于 2011-09-30T08:52:24.627 に答える
8

衝突の可能性の分析は、ウィキペディアで入手できます:http: //en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates

リンクに記載されているように、これは乱数ジェネレーターのプロパティの影響を受けます。

GUIDジェネレータコードにバグがある可能性もあります。可能性は低いですが、数学に基づく衝突の可能性よりもおそらく高いでしょう。

ブルームフィルターが適切な場合があります。GUIDが一意であるかどうかはすぐにわかりますが、衝突を誤って示す可能性があります。一度にバッチをテストする場合の別の方法は、バッチを並べ替えて、連続する各要素を比較することです。

于 2010-06-04T21:17:54.083 に答える
5

一般的に、はい、想定するのは安全です。

GUIDジェネレーターが本当にランダムである場合、1000個のGUID内で衝突する可能性は非常に小さくなります。

もちろん、これは優れたGUIDジェネレーターを前提としています。では、問題は、GUIDの生成に使用しているツールをどれだけ信頼できるかということであり、独自のテストがありますか?

于 2010-06-04T20:33:43.267 に答える
0

衝突は発生する可能性がありますが、発生する可能性はほとんどありません。(ここでの数学。)それらが実際に異なると仮定するのは安全です。

于 2010-06-04T20:33:24.493 に答える
0

通常、それはかなり安全な仮定です。

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

GUIDは常に100%一意ですか?

于 2010-06-04T20:34:55.997 に答える
0

このトピックは、カードのデッキのシナリオを思い出させます。つまり、52枚のカードのデッキを配置する方法は非常に多く、これまでに2枚の適切にシャッフルされたカードのデッキが同じ順序になっていないことはほぼ確実です。

今デッキを取り、それをシャッフルすると、そのシーケンスはユニークになり、おそらく人類全体で二度と見られることはないでしょう。確かに、52を配置する方法の潜在的な数は想像を絶するほど膨大であるため、2つのデッキが同じ順序になる可能性はほぼゼロです。

40のシャッフルされたデッキがあり、それらがすべて一意であることを確認したいというこの例では、2つが同じであることは不可能ではありませんが、すべてのデッキを10分の1に1回シャッフルできれば、おそらく発生しないでしょう。ちょっと待って、あなたは宇宙の誕生から始めました。

于 2021-03-25T12:48:17.940 に答える