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種類のクラウド移行パス、複数当事者のコラボレーション

推薦する

ログ分析の用途は何ですか?実用的なウェブサイトログ分析の全手順

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスログ分析は、Web サイ...

オグルヴィのブランドマーケティングモデルと戦略

今回は、定番の4Aブランドの中から、オグルヴィのブランドマーケティングツール、3つの定番モデルと1つ...

ウェブサイトの最適化において外部リンクの品質を向上させる方法についての簡単な説明

ウェブサイトの最適化のプロセスでは、内部リンクとオリジナルコンテンツに加えて、外部リンクもオフサイト...

パニックが襲う!クラウド コンピューティングは業界の大手企業を転覆させると予想されていますか?

クラウド コンピューティングは、世界的な業界大手に多大なメリットをもたらす一方で、このテクノロジーは...

インベントリ: 2022 年の信頼性の高いエッジ コンピューティング プラットフォーム

現代のテクノロジーが進歩し、即時の満足を求める人間の欲求を満たすにつれて、消費者は製品プロバイダーを...

2017-2018年のクラウドコンピューティングスタートアップへの大規模資金調達リストをマークダウン

スタートアップが成功するには、その背後にあるアイデアがユニークで、意味があり、ニーズを満たすものでな...

Beida Jade Bird 検索エンジン広告戦略のケーススタディ

北大玉鳥はIT教育分野で大きな影響力を持っており、その検索エンジン広告戦略も典型的です。新たな競争力...

高性能、高可用性の大規模分散Webサイトの構築方法を段階的に学習します

この記事は、大規模な分散 Web サイト アーキテクチャの学習に関する技術的な概要です。高性能、高可...

edgevm-Openvz/xen/kvm/s「言い表せない」egihostingデータセンターの時代

edgevm.com は 2 月に登録された、WordPress で構築された新しい Web サイト...

細部に焦点を当てることでウェブサイトの最適化レベルが急上昇します

SEO 技術は数十年前から中国に導入されてきました。当初は神秘的でしたが、今では一般的なものになって...

クラウドチームのIT後継計画を策定する

クラウド チームの人員は頻繁に変更されますが、パンデミックによって状況は悪化しています。クラウド チ...

ウェブサイトの関連性は奇妙な花のようなものです。関連性をうまく保つことは、一枚板の橋を渡るようなもの (パート 2)

上記の記事では、ウェブサイトコンテンツ構築の観点から、ウェブサイトコンテンツ構築の関連性をどのように...

NIST サイバーセキュリティ フレームワークの観点からエンタープライズ SaaS アプリケーションのセキュリティ コンプライアンスを検討する

米国国立標準技術研究所 (NIST) の標準は、その専門性から多くの組織で重要な役割を果たしており、...

ウェブサイトの SEO は記事を書いて外部リンクを投稿するだけですか?

友人とチャットしているときに、SEO をやっているとよく言っていましたが、みんな「わかってるよ、記事...