2016-07-23 4 views
-3

私はアプリを構築しています。 メッセージングアプリケーションであり、whatsappほど人気が​​あると仮定します。C#System.Guid.NewGuid()は次の状況で安全ですか?

世界で送信されるすべてのメッセージに対してGUIDが与えられます。

世界の2つのGUIDが等しい場合は問題があります。

現在、30億人!(公式)whatsappメッセージは1日で世界に送信されます。

私はC#(Xamarin)のSystem.Guid.NewGuidメソッドを使用してGUIDを生成しています。

乱数が本当にランダムではないため、「問題」が発生する可能性は何ですか?

(それが何百万人もの人々が毎日組み合わせた新しいGUIDの十億を取得状況を記述しているので、この質問は、他とは異なります。)

+1

[Guid.NewGuid()重複を取得する可能性はありますか?](http://stackoverflow.com/questions/8642858/what-are-the-chances-to-get-a) -guid-newguid-duplicate) – MichaelMao

+0

暗号のようなランダムなタグは入れないでください。また、投稿する前にあなたの主題をGoogleにお試しください。インターネット上のGUIDのほとんどすべての定義があなたの答えを与えるでしょう。 – Aron

+1

PS 30億は大きな数字ではありません。 GUIDは、ユニバース内の各アトムに一意的にランダムに割り当てるために十分です。あなたが宇宙の各原子にメッセージを保存する方法を見つけるときに戻ってください... – Aron

答えて

0

私はウィキペディアからのこの一節が好き:

彼らはよく、またはランダム(または擬似ランダム)番号から生成されないことがあります。乱数から生成されたGUIDは通常、6つの固定ビット(これらはGUIDがランダムであることを示します)と122のランダムビットを含みます。ユニークなGUIDの総数は2122(約5.3×1036)です。この数は非常に大きいため、同じ数がランダムに2回生成される確率は無視できるものの、保証された一意性から可能性のある重複性に至るまで、他のGUIDバージョンには異なる一意性と確率があります。単純化のために一様な確率を仮定すると、2014年現在の地球上のすべての人が6億のGUIDを所有する場合、1つの複製確率は約50%になります。

https://en.wikipedia.org/wiki/Globally_unique_identifier

あなたが本当に懸念している場合、あなたは常に衝突検出方法を作成するオプションと能力を持っています。たとえば、GUIDがすでに使用中であることを検出した場合は、新しいランダムGUIDを割り当て、重複が検出されなくなるまで繰り返します。話すようにハッシュテーブルを思い出させる。これにはパフォーマンス上の罰則がありますが、あなたの障害の解決策があることを知っているだけです!

更新

私はランダム性についての懸念を理解することができますが、あなたが考慮に入れるならば、それは、ほぼ連続的な時系列問題(の一種)に割り当てられます構造化されたアルゴリズムです。これに関する最小限の懸念があります。私は、プライマリキー解決に128ビット値を使用した場合のパフォーマンスの低下についてより懸念しています。ウィキペディアからも

GUIDは、一般的にデータベーステーブルの主キーとして使用され、そしてそれに、多くの場合、テーブルには、その属性にクラスタ化インデックスを持っています。これは、完全にランダムなGUIDは、レコードの終わり近くに単に追加するのではなく、テーブル内のどこにでもレコードを挿入する必要がある可能性があるため、レコードを挿入するときにパフォーマンスの問題が発生することを意味します。

+0

あなたの投稿はGUIDのデザインが完全に見当たりません。 GUIDは、衝突の検出が不可能な場合に使用されます。 GUIDはタイムスタンプではないため、単調増加するGUIDアルゴリズムはありません。 CAPモデルでCを必要とするため、CAPモデルでAPをサポートするシステムではタイムスタンプを使用できません。また、問題を視野に入れるために、YouTubeはビデオメッセージの分散ストレージプラットフォームです。各ビデオにはランダムな64ビットIDが与えられます。 – Aron

関連する問題