コンテンツへスキップ
uencoder

時刻でソート可能な ID として ULID を生成する

ULID(Universally Unique Lexicographically Sortable Identifier)はタイムスタンプとランダムデータを組み合わせ、作成時刻順にソートされる ID を生成します。

  1. 1

    ULID は 26 文字の文字列です:タイムスタンプ(ミリ秒、48 ビット)に 10 文字+ランダム性(80 ビット)に 16 文字。ULID は辞書式でソート可能です。ULID を文字列としてソートすると、作成時刻順に並びます。これはデータベースインデックス(時間順)、ログエントリ、イベントソーシングに価値があります。ULID は URL セーフです(Crockford Base32 アルファベット:0-9A-Z、I、L、O、U を除外)。

  2. 2
    UUID / ULID ジェネレーター →

    比較のために UUID を生成します。UUID v4 はランダムなので、ソートしても意味のある順序になりません。ULID は時間でソートされます。時間順のレコードがキャッシュ局所性と範囲クエリの性能を向上させるデータベース主キーに有用です。純粋な一意性には UUID を、時間順序が重要な場合には ULID を使ってください。

  3. 3
    タイムスタンプコンバーター →

    ULID の時間コンポーネントを理解するために、現在のタイムスタンプを取得します。ULID の最初の 10 文字がミリ秒タイムスタンプをエンコードします。これにより ULID はデコード可能です。データベースを参照せずに作成時刻を抽出できます。デバッグとログ分析に使ってください。

  4. 4
    Base62 エンコーダー →

    代替のソート可能 ID として、タイムスタンプ+乱数を Base62 でエンコードします。ULID に似ていますが、より大きなアルファベット(32 文字に対し 62 文字)で短い ID を生成します。ただし、ULID の Crockford Base32 の方が堅牢(紛らわしい文字なし)で標準化されています。

よくある質問

データベースキーには ULID と UUID のどちらですか?
時間順のレコードが必要なら ULID を使ってください(インデックスの局所性、範囲クエリ、時系列ソートが向上)。純粋なランダム性が必要なら(タイミング情報の漏えいなし)UUID v4 を使ってください。ULID の標準化された代替としては UUID v7(時間順、RFC 9562)があります。ULID は 26 文字、UUID は 36 文字(ハイフン付き)または 32 文字(なし)です。
ULID はタイミング情報を漏らしますか?
はい。最初の 10 文字がミリ秒タイムスタンプをエンコードし、ID がいつ作られたかを明らかにします。ほとんどのアプリケーションでは問題ありません(作成時刻は秘密ではない)。プライバシーに敏感なアプリケーション(匿名投稿、医療記録)では、ランダム ID(UUID v4、NanoID)を使ってください。実際の時刻を隠すために、ランダムな開始時刻(オフセット)付きの ULID を使う方法もあります。

このタスクを解決するワークフロー

関連ツール