1。概要
UUID(Universally Unique Identity)の略語は、ソフトウェア構築標準であり、通常は32バイトの16進数(128ビット)で表され、時間と空間の一意性を保証できます。現在、最も広く使用されているUUIDはMicrosoftのGUIDです。
2つの役割
UUIDを使用すると、分散システムのすべての要素に一意の識別情報を持たせることができるため、データベース作成時に名前の重複の問題を考慮することなく、誰もが他とは異なるUUIDを作成できます。文字列をランダムに生成し、トークン、ユーザーアカウント、注文などとして使用します。
3原則
UUIDは、マシンで生成された番号を参照し、同じ時間と空間にあるすべてのマシンが一意であることを保証します。
UUIDは次の部分で構成されています。
- タイムスタンプ:現在の時刻または時計のシーケンスに従って文字列を生成します
- プレイ全体の一意のマシン識別番号は、ネットワークカードのMACアドレスまたはIPに基づいて取得されます。ネットワークカードがない場合は、他の方法で取得されます。
- 乱数:マシンは一連のシーケンスを自動的にランダム化します
などなど
4アルゴリズム
uuidには、uuid1()、uuid2()、uuid3()、uuid4()、uuid5()の5つの生成アルゴリズムがあります。
1. uuid1()はタイムスタンプに基づいています
これは、MACアドレス、現在のタイムスタンプ、および乱数で構成されます。世界規模での独自性を保証します。ただし、MACアドレスを使用するとセキュリティ上の問題が発生するため、LANではMACではなくIPを使用してください
2. uuid2()は分散環境DCEに基づいています
アルゴリズムはuuid1と同じですが、タイムスタンプの最初の4桁がPOIXのUIDに置き換えられる点が異なります。これは、実際にはほとんど使用されません。
注:Pythonにはそのような関数はありません
3. uuid3()は、名前とMD5ハッシュ値に基づいています
これは、名前と名前空間のMD5ハッシュ値を計算することによって取得されます。これにより、同じ名前空間内の異なる名前の一意性と、異なる名前空間の一意性が保証されます。ただし、同じ名前空間と同じ名前は同じuuidを生成します。
4. uuid4()は乱数に基づいています
疑似乱数から得られる、一定の繰り返しの確率があり、この確率は計算することができます
5. uuid5()は名前とSAHI値に基づいています
アルゴリズムはuuid3と同じですが、違いはSAHIアルゴリズムが使用されることです。
5使用経験
- PythonにはDCEがないため、uuid2は無視できます
- uuid4には確率的な再現性がありますが、マッピングが不足しているため、使用しないことをお勧めします。
- グローバル分散環境を使用している場合は、uuid1を使用するのが最適です。
- 名前の一意性が必要な場合は、uuid3またはuuid5を使用するのが最適です。
6使用
import uuid
print(uuid.uuid1())
print(uuid.uuid4())
print(uuid.uuid3(uuid.NAMESPACE_DNS, "myname"))
print(uuid.uuid5(uuid.NAMESPACE_DNS, "myname"))
演算結果:
a8f5372c-2bb8-11eb-9da2-000c292b487b
17893888-3c02-434e-b207-a64ed87b8d15
86ade465-d446-3e2e-b52b-fe5589f9387f
3d30fd12-b931-53b1-98ed-25e755531898