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

推薦する

個人SEOの依頼を受ける際は、誇張せず現実的に

著者は3年間SEOに携わっています。最初の2年間は主に自分のサイトを最適化していました。1つは実践し...

多くの消費者還元サイトは犯罪の疑いがあり、公安部などが警告を発している。

Chinanews.com、8月17日。公安部のウェブサイトによると、公安部、国家工商行政管理総局、...

RapidSwitch-20 ポンド/Q8300/8G メモリ/3x250G ハードディスク/100M 無制限/英国

イギリスの有名なデータセンターであるRapidswitch(1999年に設立され、イギリスに2万台以...

IBMとPitney Bowesがハイブリッドクラウド位置情報サービスで提携

IBM (NYSE: IBM) と Pitney Bowes (NYSE: PBI) は本日、コード...

Baiduを使用してウェブサイトのランキングを向上させる際に注意すべきいくつかの問題

Baidu Knows は、多くのウェブマスターにとってウェブサイトのランキングを向上させる強力な武...

WeChatビジネスモデルの発展と企業への関連性 - A5ウェブマスターネットワーク

WeChatマーケティングは、今では珍しいものではありません。大企業だけでなく、中小企業も含め、多く...

エンタープライズ統合ネットワークの最適化にはデータ分析が必要

インターネット マーケティングは徐々に従来のマーケティングに取って代わりつつあり、企業のマーケティン...

ウェブサイトの最適化で検索エンジンに対応する方法

検索エンジンは今やより人間化される傾向にあり、例えば、Baidu は現在、ユーザーのブラウザ内の C...

グリーンクラウドはいかがでしょうか? greencloudvpsはどうですか?ベトナムVPSの簡単なレビュー

Green Cloud のアジア データ センターは、すでに HostCat で香港、シンガポール、...

Kubernetes API サーバー ハンドラー登録プロセスの分析

著者: Han Weisen は、China Mobile Cloud Capability Cen...

JD Cloud、ワンストップサービスプラットフォーム構築に向けたスマート教育戦略を発表

2018年7月26日、「スマート教育、未来を見据える――JDクラウドスマート教育戦略会議」が北京で成...

クラウドコンピューティングとエンタープライズソフトウェアが世界のIT支出増加を牽引

デジタルトランスフォーメーションが IT リーダーにとって最優先事項であるかどうか疑問に思う場合は、...

ブランドが不在でPinterestの勢いが失われる

北京時間7月23日、海外メディアの報道によると、Pinterestはかつてソーシャルメディアの寵児だ...

上海のウェブサイトが「年金消費」を利用して金儲けするねずみ講の疑いで捜査される

現在、上海佳地豪公司傘下の「I Love What I Buy」ウェブサイトには、全国で7万人以上の...

クラウドネイティブ権限を構築するための 5 つのベスト プラクティス

クラウドネイティブ/マイクロサービスベースの製品は複雑であり、これらの製品に対するアクセス制御の構築...