この記事では『ULID』について、
- ULIDとは
- ULIDとUUIDの違い(ソート可能性と形式)
- ULIDの仕様
などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
ULIDとは
ULIDは「Universally Unique Lexicographically Sortable Identifier」の略で、簡単に説明すると「生成順でソート可能なユニークなID」となります。
ULIDは128ビットの長さを持ちます。このうち前半の48ビットはタイムスタンプとして利用され、UNIX時間(ミリ秒)で表現されています。これにより、1ミリ秒単位でのソート順が保証されます。
一方、後半の80ビットはランダムな値として利用されるため、同じ1ミリ秒の中で生成されたULIDでも、それぞれ異なるULIDが得られるようになっています。具体的には、同じ1ミリ秒の中で同じ生成器からULIDを生成した場合、280の範囲でソート順が保証されます。
ちなみに、ULIDはタイムスタンプ部の構造上、西暦10889年まで使用することができます。
ULIDとUUIDの違い
ULIDとUUIDはどちらもユニークなIDを生成する仕組みですが、主な違いは「ソート可能性」と「形式」にあります。
ULIDとUUIDのソート可能性
ULIDは前半の48ビットをタイムスタンプ部として利用するため、生成順にソートが可能です。
一方、UUIDはソートすることができません。具体的には、UUIDは生成方法によって、5つのバージョンが存在し、バージョン4が最も広く使用される形式です。UUID(バージョン4)は乱数に基づいて生成されるため、生成順のソートは考慮されていません。
ULIDとUUIDの形式
ULIDは26文字の長さを持ち、CrockfordのBase32エンコーディング方式で「XXXXXXXXXXXXXXXXXXXXXXXXXX」の形式を取ります。
一方、UUIDは36文字(「-」を除くと32文字)の長さを持ち、16進数表記で「8桁-4桁-4桁-4桁-12桁(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)」の形式を取ります。
あわせて読みたい
『UUID』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るUUIDとは?「バージョンの確認方法」や「衝突確率」などを解説!
ULIDの仕様
ULIDの仕様は以下のリポジトリに記載されています。
ULIDの仕様が記載されているリンク
ULIDの仕様を以下に示します。
ULIDの仕様
- 128-bit compatibility with UUID
- 1.21e+24 unique ULIDs per millisecond
- Lexicographically sortable!
- Canonically encoded as a 26 character string, as opposed to the 36 character UUID
- Uses Crockford's base32 for better efficiency and readability (5 bits per character)
- Case insensitive
- No special characters (URL safe)
- Monotonic sort order (correctly detects and handles the same millisecond)
- Implementations in other languages
ULIDの仕様(意訳)
- UUIDとの128ビット互換性
- ULIDはUUIDと同じ128ビットの長さを持っています。
- ミリ秒あたり1.21e+24のユニークなULID
- 同じミリ秒内でも、280(1.21e+24)回分の異なるULIDを生成できます。
- 辞書順でソート可能
- ULIDは生成された順番に文字列としてソートすることができます。
- 26文字の正規エンコード
- UUIDが36文字の長さ(「-」を含めた長さ)であるのに対して、ULIDは26文字の長さで表現されます。
- CrockfordのBase32使用
- より効率的かつ読みやすいエンコーディングとして、CrockfordのBase32が使用されています。これにより、1文字あたり5ビットを使用します。
- 大文字・小文字の区別なし
- ULIDは大文字と小文字を区別しません。
- 特殊文字なし (URLセーフ)
- ULIDにはURLで使用できない特殊文字は含まれていません。
- 単調ソート順序
- 同じミリ秒内でのULID生成でも、正しくソート順序を維持します。
- 他の言語での実装
- ULIDは複数のプログラミング言語での実装が存在します。
各プログラミング言語において、ULIDを生成するライブラリが存在します。ULIDを生成するライブラリの多くは、有志のコミュニティメンバーによって独自に実装されています。
本記事のまとめ
この記事では『ULID』について、以下の内容を説明しました。
- ULIDとは
- ULIDとUUIDの違い(ソート可能性と形式)
- ULIDの仕様
お読み頂きありがとうございました。