1

モデル内のオブジェクトを識別するために、一意の64ビットキー(疑似)をランダムに生成したいと思います。システムのすべてのユーザー間で、キーをできるだけ一意にする必要があります(N個のキーを一緒に使用した場合の衝突の可能性を最小限に抑えます)。

データが安いので、通常のGUIDは今のところ問題外です:)。同じコンテキストで100万を超えるキーが必要になるとは思わないので、64ビットで十分だと思います(衝突の確率は約10e-7です)。

補足として、これらのキーのタプルを単一の64ビットキーにフォールド/ハッシュするスキームも必要になります。これも、適切に分散/一意である必要があります。

とにかく優れた(十分に分散された)ハッシュ関数が必要なので、GUIDを半分に折りたたんでも大丈夫ですか(GUIDの固定ビットを何らかの方法で考慮している可能性があります)?それとも、ローカルRNGを使用する方が良いですか?生成の空間/時間全体で一意性を最大化するためにRNGをシードするにはどうすればよいですか?どのくらい強力なRNGが必要ですか?

私は特に効率性(ある程度まで)を求めていませんが、確率が約束を守ることを本当に望んでいます!

4

1 に答える 1

2

md5のような高速の128ビット暗号化ハッシュを使用してカウンターをハッシュしてから、2つに分割します。これにより、それぞれ64ビットの「ランダムな」独立した値が得られ、かなり効率的であるはずです。

単純なカウンターは使えませんか?

分散ソリューションが必要な場合は更新します。各マシンにカウンターを配置し、マシンのMACアドレスとカウンターをハッシュします。スループットを向上させるには、マシンごとに複数のカウンターを使用し、それぞれに異なる名前(A、Bなど)を付け、名前もハッシュします。これはハッシュを使用することの大きな利点です-そこに何でも投げることができます。あいまいさを持たないように注意してください(たとえば、ハッシュする各ものの間に「-」を入れて、「1」の名前と「23」のカウントが「12」の名前とカウントと混同されないようにします。 「3」)。

于 2011-08-30T13:18:21.547 に答える