TL;DR
Universally Unique Lexicographically Sortable Identifier の略。UUID の欠点を補うように設計された一意識別子で、生成した時刻の順に辞書順でソートできる。
なぜ必要か
仕様では、UUID の欠点として次の点を挙げている。
- 128 ビットのランダムな値を表すのに、文字数の効率がよくない
- UUID v1/v2 は、一意で変わらない MAC アドレスを必要とするが、多くの環境ではそれが難しい
- UUID v3/v5 は一意なシードを必要とし、生成される ID がランダムに分布するので、データ構造の断片化を招きうる
- UUID v4 はランダムな値だけでできており、同じく断片化を招きうる
仕組み
ULID は 128 ビットで、UUID と互換性がある。先頭の 48 ビットがミリ秒単位の UNIX 時刻、残りの 80 ビットがランダムな値である。文字列にするときは Crockford の Base32 で表し、時刻部分 10 文字とランダム部分 16 文字の計 26 文字になる(UUID は 36 文字)。大文字と小文字を区別せず、特殊文字を含まないので URL にそのまま使える。同じミリ秒の中でも、単調に増える順序を保てる。
例
01ARZ3NDEKTSV4RRFFQ69G5FAV