「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > UUID について知っておくべきことすべて。

UUID について知っておくべきことすべて。

2024 年 11 月 7 日に公開
ブラウズ:305

Everything you need to know about UUID.

A Universally Unique Identifier (UUID) は、情報を一意に識別するためにコンピューター システムで使用される 128 ビットのラベルです。 UUID は、時空を超えて一意になるように設計されており、中央機関なしで独立して生成できるため、重複のリスクが最小限に抑えられます。

UUID は次のようなさまざまな目的に役立ちます:

  • データベース内のレコードを識別します。
  • 分散システム内のオブジェクトのタグ付け。
  • 一意性が重要なアプリケーションで主キーとして機能します。

実際の使用例

  • データベース: UUID は、レコードの一意の識別を保証するために、リレーショナル データベースの主キーとして使用されます。
  • マイクロサービス: リクエストとリソースに一意の識別子を提供することでサービス通信を促進します。
  • IoT デバイス: ネットワーク内のデバイスを一意に識別し、複数のソースからのデータが競合することなく集約できるようにします。

UUID使用のメリットとデメリット

利点:

  • グローバルな一意性: UUID は衝突する可能性が非常に低いため、複数のノードが個別に識別子を生成する分散システムに適しています。
  • 中央機関は不要: 調整なしで生成できるため、分散環境での操作が簡素化されます。
  • スケーラビリティ: 複数のサーバーまたはサービスにわたるスケーリングが必要なシステムでうまく機能します。

短所:

  • ストレージ サイズ: UUID は、従来の整数 ID (通常は 32 ビット) に比べてより多くのスペース (128 ビット) を消費するため、ストレージ コストの増加につながる可能性があります。
  • パフォーマンスの問題: UUID のインデックス作成は、そのランダム性とサイズによりデータベースのパフォーマンスを低下させる可能性があり、シーケンシャル ID と比較してクエリ時間が遅くなる可能性があります。
  • ユーザーの不親切さ: UUID は、ユーザー インターフェースに表示される場合、覚えにくく、またユーザーフレンドリーではありません。

スタンダード

UUID の標準表現は、8-4-4-4-12 の形式に従い、ハイフンで区切られた 5 つのグループに分割された 32 個の 16 進文字で構成され、合計 36 文字 (32 個の英数字と 4 個のハイフン) になります。 .

UUID 形式は次のように視覚化できます:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

どこ:

  • MはUUIDのバージョンを示します。
  • N はバリアントを示し、UUID のレイアウトの解釈に役立ちます。

UUIDのコンポーネント

  1. TimeLow: タイムスタンプの下位フィールドを表す 4 バイト (8 つの 16 進数文字)。
  2. TimeMid: タイムスタンプの中間フィールドを表す 2 バイト (4 つの 16 進数文字)。
  3. TimeHighAndVersion: バージョン番号とタイムスタンプの高位フィールドを含む 2 バイト (4 つの 16 進数文字)。
  4. ClockSequence: 2 バイト (4 つの 16 進数文字) は、特に複数の UUID がすぐに連続して生成される場合、またはシステム クロックが調整される場合に、衝突を回避するために使用されます。
  5. Node: 6 バイト (12 個の 16 進数文字)。通常、生成ノードの MAC アドレスを表します。

UUIDの種類

  1. バージョン 1: 現在のタイムスタンプと生成ノードの MAC アドレスの組み合わせを使用する時間ベースの UUID。このバージョンでは、時空を越えた一意性が保証されます。

  2. バージョン 2: バージョン 1 に似ていますが、ローカル ドメイン識別子が含まれています。ただし、制限があるため、あまり一般的には使用されません。

  3. バージョン 3: 名前空間識別子と名前の MD5 ハッシュを使用して生成された名前ベースの UUID。

  4. バージョン 4: ランダムに生成された UUID により、高いランダム性と一意性が提供され、バージョン管理用に数ビットのみが予約されています。

  5. バージョン 5: バージョン 3 と似ていますが、ハッシュに SHA-1 を使用するため、バージョン 3 より安全です。

バリエーション

UUID のバリアント フィールドによって、そのレイアウトと解釈が決まります。最も一般的なバリエーションは次のとおりです:

  • バリアント 0: NCS の下位互換性のために予約されています。
  • バリアント 1: ほとんどの UUID で使用される標準レイアウト。
  • バリアント 2: あまり一般的ではない DCE セキュリティ UUID に使用されます。
  • バリアント 3: 将来の定義のために予約されています。

バージョン 4 の場合、UUID は次のようになります:

550e8400-e29b-41d4-a716-446655440000

ここ:

  • 41d4 はバージョン 4 であることを示します。
  • a7 はバリアントを表し、この場合は一般的な「Leach-Salz」バリアントを表します。

UUID の計算方法

  1. バージョン 1 (時間ベース):

    • タイムスタンプは通常、1582 年 10 月 15 日 (グレゴリオ暦改革の日) からの 100 ナノ秒間隔の数です。
    • ノードは、UUIDを生成するマシンのMACアドレスです。
    • クロック シーケンスは、クロック時間が変更された場合(システムの再起動などにより)一意性を確保するのに役立ちます。
  2. バージョン 3 およびバージョン 5 (名前ベース):

    • 名前空間 (DNS ドメインなど) は名前 (ファイル パスや URL など) と結合され、ハッシュされます。
    • ハッシュ (バージョン 3 の場合は MD5、バージョン 5 の場合は SHA-1) は UUID 形式に構造化され、バージョン フィールドとバリアント フィールドが適切に設定されていることを確認します。
  3. バージョン 4 (ランダムベース):

    • UUID の 122 ビットに対して乱数または擬似乱数が生成されます。
    • バージョンとバリアントのフィールドはそれに応じて設定され、UUID 標準への準拠が保証されます。

UUIDv4 の計算例

ステップ 1: 128 のランダム ビットを生成

次の 128 ビットのランダム値を生成すると仮定します:

11001100110101101101010101111010101110110110111001011101010110110101111011010011011110100100101111001011

ステップ 2: UUIDv4 バージョンとバリアントを適用する

  1. Version: ビット 12 ~ 15 (4 番目の文字) を 0100 (UUID バージョン 4 の場合) に置き換えます。
    元の値: 1100 が 0100 になる → この位置の値が更新されました。

  2. バリアント: 9 番目のバイトのビット 6 ~ 7 を 10 に置き換えます (RFC 4122 バリアントの場合)。
    元の値: 11 が 10 になる → この位置の値が更新されました。

ステップ 3: 16 進数にフォーマットする

128 ビット バイナリを 5 つの 16 進数グループに変換します:

  1. 32ビットグループ: 11001100110101101101010101111010 → ccda55ba
  2. 16ビットグループ: 1011101101101110 → b76e
  3. 16 ビット グループ: 0100010101000101 → 4545 (バージョン 4 の場合は 0100)
  4. 16 ビット グループ: 1010110111110010 → adf2 (バリアントは 10)
  5. 48 ビット グループ: 11010011011110100100101111001011 → d39d25cb

ステップ 4: グループを結合する

最終的な UUID は次のようになります:
ccda55ba-b76e-4545-adf2-d39d25cb

リリースステートメント この記事は次の場所に転載されています: https://dev.to/rosselli00/what-is-uuid-cng?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3