ULID - 分散システムでグローバルに一意な識別子を生成するためのより良い選択肢

ULID - 分散システムでグローバルに一意な識別子を生成するためのより良い選択肢

ULID と UUID

ULID(Universally Unique Lexicographically Sortable Identifier)は、グローバルに一意の識別子を生成するアルゴリズムです。タイムスタンプと乱数を組み合わせて、生成された識別子がソートされたときに時系列順になるようにします。 ULID の形式は、10 個のタイムスタンプ文字と 16 個の乱数文字で構成される 48 文字の文字列です。

ULID の形式は次のとおりです。

 01AN4Z07BY 79KA1307SR9X4MV3 |----------| |----------------| Timestamp Randomness 10 chars 16 chars

ULID のタイムスタンプ部分は、現在の時刻と Unix エポック (1970-01-01) の差で表され、乱数部分では一意性を確保するためにランダムに生成された文字が使用されます。

ULID は、分散システムでグローバルに一意の識別子を生成するように設計されており、データベース内で並べ替えやインデックス付けを行うことができます。

UUID(Universally Unique Identifier)は、情報を一意に識別するために通常使用される 128 ビットの識別子です。これは、数字と文字のグループで構成される 32 文字の文字列で、通常は 8-4-4-4-12 の形式でハイフンで区切られた 5 つのセグメントに分割されます。 UUID 生成アルゴリズムは、時間と空間を問わず一意であることが保証されます。

コンピュータ サイエンスでは、UUID は、データベースの主キーやメッセージ キューのメッセージ識別子など、分散システム内の一意の識別子としてよく使用されます。 UUID の一意性と分散性により、分散システムでは非常に価値が高まります。

UUID にはさまざまなバージョンがあります。

  1. UUIDv1: タイムスタンプと MAC アドレスに基づいて生成されますが、プライバシーとセキュリティのリスクが生じる可能性があります。
  2. UUIDv3: 名前空間と名前の MD5 ハッシュ値に基づいて生成されます。
  3. UUIDv4: 乱数生成に基づいており、高い一意性を備えています。
  4. UUIDv5: 名前空間と名前の SHA-1 ハッシュ値に基づいて生成されます。

UUID の各バージョンには、生成された UUID が分散システム全体で一意であることを保証するための特定の生成アルゴリズムと形式要件があります。

ULID と UUID

ULID は、タイムスタンプと乱数を組み合わせて、分散システムで整然とした一意の識別子を生成する、グローバルに一意の識別子を生成するアルゴリズムです。 ULID の形式は、タイムスタンプと乱数を含む 26 文字の文字列です。

対照的に、UUID は標準化されたグローバルに一意の識別子であり、通常は乱数に基づいて、またはタイムスタンプやコンピューターの MAC アドレスなどの情報に基づいて生成されます。 UUID の形式は 32 文字の文字列で、通常は 32 ビットの 16 進数で表されます。

ULID が UUID よりも優れている点は、タイムスタンプ情報が含まれているためソート可能であり、分散システムで生成された識別子のソートと取得がより効率的になることです。 UUID はグローバルな一意性を重視しますが、分散システムでは並べ替えや取得にパフォーマンス上の問題が発生する可能性があります。

ULIDの特徴と仕様

  1. 「グローバル一意性」: ULID によって生成される識別子はグローバルに一意であり、データ レコード、エンティティ、またはイベントを識別するために使用できます。
  2. 「辞書順に並べ替え可能」: ULID はタイムスタンプと乱数に基づいて生成されるため、辞書順に並べ替えることができ、データベースの主キーまたはインデックスとして使用するのに適しています。
  3. 「読みやすさ」: ULID は Crockford の Base32 に基づくエンコーディングを使用するため、生成された識別子は文字列形式で表示でき、比較的読みやすくなります。
  4. 「時間順」: ULID の前半部分にはタイムスタンプ情報が含まれているため、ULID に基づいて生成時刻を推測できます。

ULID の形式は通常 01AN4Z07BY で、10 ビットのタイムスタンプと 16 ビットの乱数で構成されます。具体的な生成アルゴリズムについては、ULID 仕様を参照してください。

ULID仕様:

  1. 長さは 128 ビットで、タイムスタンプと乱数で構成されます。
  2. 順序を保証するためにタイムスタンプを使用し、一意性を保証するために乱数を使用します。
  3. Crockford の Base32 エンコーディングを使用して、印刷可能な ASCII 文字列を生成します。

ULID の形式は次のとおりです。

 01AN4Z07BY 79KA1307SR9X4MV3 |----------| |----------------| Timestamp Randomness 10 chars 16 chars

ULID のタイムスタンプ部分は、現在の時刻と Unix エポック (1970-01-01) の差としてミリ秒単位の精度で表されます。乱数部分では、一意性を保証するために安全な乱数生成アルゴリズムを使用します。 ULID は、分散システムでグローバルに一意の識別子を生成するように設計されており、時間で並べ替えることができます。

  1. タイムスタンプ: 最初の 48 ビットを占め、ミリ秒単位の精度を持つ自己増加する UTC タイムスタンプです。
  2. 乱数: 最後の 80 ビットを占め、乱数生成アルゴリズムを使用して生成されます。

ULID の構成は次のとおりです。

ULID は 32 個の印刷可能な文字で構成され、Crockford の Base32 エンコーディングを使用して表されます。具体的な形式は次のとおりです。

 tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt

このうち、先頭のタイムスタンプ部分は最初の 48 ビットを占め、後部の乱数部分は後ろの 80 ビットを占めます。

ULID申請

ULID は通常、次のようなグローバルに一意の識別子を生成し、時間順に並べる必要があるさまざまな分散システム シナリオで使用されます。

  1. データベースの主キー: 分散システムでは、ULID をデータベース テーブルの主キーとして使用して、各レコードに一意の識別子が付与され、生成時間で並べ替えられるようになります。
  2. ログ追跡: ログ システムでは、ULID をログ エントリの一意の識別子として使用して、ログの追跡と並べ替えを容易にすることができます。
  3. 分散システムにおけるトランザクション識別: 分散システムでは、ULID をトランザクションの一意の識別子として使用して、各トランザクションがグローバルに一意の識別子を持つことを保証できます。

Java で ULID を使用するには、Maven または Gradle を使用して追加できる ULID ライブラリ依存関係をプロジェクトに追加する必要があります。

Maven を使用して ULID ライブラリ依存関係を追加します。

 <dependency> <groupId>de.huxhorn.sulky</groupId> <artifactId>de.huxhorn.sulky.ulid</artifactId> <version>2.0.0</version> </dependency>

Gradle を使用して ULID ライブラリ依存関係を追加します。

 implementation 'de.huxhorn.sulky:de.huxhorn.sulky.ulid:2.0.0'

ULID ライブラリの依存関係を追加した後、Java コードで ULID を使用して一意の識別子を生成できます。

 import de.huxhorn.sulky.ulid.ULID; public class Main { public static void main(String[] args) { ULID.Value ulid = new ULID().nextValue(); System.out.println(ulid); } }

<<:  Kubernetes のコンテナタイプを調べる

>>:  「オルタナティブクラウド」移行戦略 | 3種類のクラウド移行パス、複数当事者のコラボレーション

推薦する

グループ購入、ソーシャル電子商取引における Pinduoduo の野望はどれほど大きいのでしょうか?

Qunmaimaiはショッピング型のミニプログラムです。 Qunmaimaiプラットフォームは、 P...

パブリッククラウドに関する10の誤解を払拭

現在でも、パブリック クラウドのセキュリティとコストについては誤解や混乱が残っており、企業の意思決定...

コンテンツトピックを操作し、プロモーションチャネルを確認するにはどうすればいいですか?

小さなコンテンツトピックには基本的に次の手順があります。 1.テーマと表現方法を決める1. トピック...

マルチクラウド管理の課題とその克服方法

厳しい市場において、パンデミックとビジネスダイナミクスの劇的な変化により市場はより複雑化し、企業はよ...

ウェブサイトのコンバージョン率について話すときは、まずキーワードの商業的価値について話す必要があります。

ウェブサイトのトラフィックは良いが、コンバージョン率が低すぎるという友人によく出会います。そのたびに...

hostwinds-10.3$/Windows/512m メモリ/20g ハードディスク/25m 無制限

Hostwinds は、生涯 20% オフの割引コード WHTJAN をリリースしました。公式 We...

三国志を読む:注目を浴びた鍾馗の死がなぜ目立たずに生き残ったのか?

長江は東に流れ、波はすべての英雄を洗い流します。後漢末期、漢王朝は弱体化し、軍閥は権力を争いました。...

Webmaster.com からの毎日のレポート: Jumei.com が偽造品危機に直面、Android の創設者が辞任

1. ファウンダー証券がTmallに出店、金融商品の電子商取引販売がトレンドに北京ニュース(記者 呉...

a2hosting 10周年記念 - プロモーション: SSDホスティングが60%オフ、生涯無料のSSDホスティングを獲得

a2hosting からイベント情報を受け取りました: a2hosting 10 周年を記念して、バ...

ネットワーク最適化で華豊が勝利、SEOのヒントはここに

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますインターネ...

Baidu の重さには注意し、その「重さ」に惑わされないでください

多くのウェブマスターは、ウェブサイト全体を重みで扱うことを好みます。重みが高ければ、ウェブマスターは...

多国籍企業がベンチャーキャピタル業界に参入:もはやインターネットに大金を賭けることはない

MMVゼネラルマネージャーのハスル・サンジ氏(写真提供:テンセントテクノロジー)テンセントテクノロジ...

選ばれたソリューションが生まれ、その背後にある3つの価値が説明される

過去数年間にデジタル変革が世界を席巻したことは周知の事実です。新しいテクノロジーが広く応用されるにつ...

lisahost: トリプルネットワークバックホール cn2 gia VPS は月額 18 元から、48 時間以内の無条件返金

Lisahostは2009年に設立された(とされている)企業で、当初はCDNとドメイン名関連の事業を...

ランキング向上のための内部リンク最適化の比較分析

ウェブサイトの内部リンクの最適化は重要なタスクです。内部リンクはバックリンクの一種であり、ランキング...