6

アプリケーションで発生するイベントに ID を生成したいと考えています。

イベントの頻度はユーザーの負荷に依存するため、1 秒あたり数十万回発生する可能性があります。

UUID.randomUUID()性能的に問題があるかもしれないので使う余裕はありません-これを見てください。

次のようにIDを生成することを考えました:

System.currentTimeMillis() + ";" + Long.toString(_random.nextLong())

クラスが保持_randomしている static はいつですか。java.util.Random

私の質問は次のとおりです。

  1. この組み合わせの配布は、私のニーズに十分合っていると思いますか?
  2. Java の Random 実装は現在の時間に関連しているので、2 つを組み合わせているという事実は危険ですか?
4

4 に答える 4

3

衝突の可能性を防ぐために、ユーザーの一意の ID を生成された ID に統合することをお勧めします。これを行うには、ユーザー ID を生成された ID に直接追加します。

System.currentTimeMillis() + ";" + Long.toString(_random.nextLong()) + userId

または、ユーザーの id をシード_randomとして使用するユーザーごとに個別に使用できます。

于 2013-05-13T09:16:47.363 に答える
2

UUID uuid = UUID.randomUUID();ウォームアップ後、PC の 0.0021 ミリ秒に対して 0.015 ミリ秒の 8 分の 1 未満の速度です。それはUUIDにとって肯定的な議論になるでしょう-私にとって。

  1. ランダムな長さを少し右にシフトすることができるので、時間はより規範的であり、順序付けされます。
  2. いいえ、疑似ランダム分布が関係しています。
于 2013-05-13T09:19:38.200 に答える