2016-11-03 5 views

答えて

5

カサンドラのtimeuuidは、UUIDを生成するマシンの時刻とMACアドレスに基づいて、Version 1 UUIDです。

使用時間は100nsまで正確です。したがって、衝突の可能性は非常にスリムです(ナノ秒は100万分の1ミリ秒です)。

+3

さらに、多くの実装(C *を含む)では、単調に増加するカウンタとして10,000の100nsの解像度が使用されます。つまり、1ノードにつき1ミリ秒ごとに "new uuid"を10,000回呼び出します。 1ミリ秒あたり10,000の割合で挿入する可能性は非常に低いですが、そうした場合は衝突が発生する可能性があります。 –

2

カサンドラのtimeuuidが基づいているバージョン1つのUUID(タイプ1 UUID)である:

  1. 1582年10月15日以来、100ナノ秒間隔のカウントから成るタイムスタンプ(グレゴリオ改革の日付にChristian カレンダー)。
  2. バージョン(値は1にする必要があります)。
  3. バリアント(値は2である必要があります)。
  4. シーケンス番号。カウンタまたは疑似乱数にすることができます。
  5. マシンのMACアドレスとなる「ノード」(マシン間でUUIDを一意にする必要があります)。

シーケンス番号に擬似乱数を使用すると、各UUIDクラスに一意のIDが設定される確率は16,384になります。

ミリ秒あたり10000を超えるUUIDを生成すると、衝突する可能性があります。

1ミリ秒= 10^6ナノ秒これにより

我々は100nsのカウントとしてタイムスタンプを取るよう、我々はナノ秒レベルのタイムスタンプが、 を取る場合は、10^6 UUIDを生成することができます。

1ミリ秒でユニークなタイムスタンプが最大10000個あります。

これ以上のMACアドレスを持つ単一のマシンで生成すると、シーケンス番号を考慮する必要があります。

アプリケーションで1秒あたり10000を超える値が生成される場合は、別の列を使用して衝突を回避する複合キーを作成します。

関連する問題