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

推薦する

馬華クラウド:全品20%オフ、香港cn2クラウドサーバー99元/年、安徽BGPクラウド29元(5M帯域幅付き)

馬華クラウドは、国慶節の休暇中にスーパープロモーションを実施します:(1)香港クラウドサーバー(CN...

lazys3 ブルートフォース列挙バケット

この記事の目的は、いくつかのバケットの名前または会社名を知り、プログラムを使用してこの会社の下にある...

6万点の商品が10%オフで販売され、タオバオの売り手は280万ドルの巨額損失を被る可能性

商人は慈悲を乞うた。「おや!価格が間違っています。注文をキャンセルしてください。」ネットユーザーから...

古い格言: オリジナルのランキングは一時的なものに過ぎないのでしょうか?

百度が重複コンテンツの取り締まりを強化したことで、「世の中のほとんどの記事はコピーされている」という...

SMART原則を用いたウェブサイト計画

ウェブサイトが成功するかどうかを決定する要因は多数あります。ウェブサイトの事前計画は最も重要な要因の...

Jiuxian.comは寒い冬に大暴れし、2012年初頭にさらに2億ドルを調達した。

これは素晴らしい電子商取引会社です。派手な広告や誇張されたビジネスモデルはなく、経営者も姿を現すまで...

Zheye Hosting - 全商品 30% オフ/専用サーバー + VPS: 日本、香港、シンガポール、米国 CN2

zheye hostの国慶節プロモーション:[1] 今から10月8日まで、全製品が30%オフ。これに...

Baidu の最適化は行き詰まりました。SEOER は他に何ができるでしょうか?

現在の検索エンジン最適化の発展から判断すると、新しいものは何もないようです。コンテンツのほかに、外部...

テンプレートベースのウェブサイトは本当にカスタムメイドのウェブサイトよりも劣っているのでしょうか?インターネット企業に騙されないでください!

月収10万元の起業の夢を実現するミニプログラム起業支援プランテンプレートベースのウェブサイト構築と比...

電子商取引代理業が新たな資本の出口となり、今後3年間で上場企業を見ることは困難

電子商取引分野における資本配置が、中核のB2C企業から電子商取引周辺サービス産業にまで拡大している事...

エッジコンピューティングは機会と不確実性の両方をもたらす

5G の登場により、データの送信と処理はネットワークのエッジに移行しました。このエッジコンピューティ...

分散KV-1スタンドアロンKVの実装

[[437220]]この記事はWeChatの公開アカウント「roseduanの執筆場所」から転載した...

ウェブサイトが降格された後の正しい対処とトラブルシューティングのアイデア

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

現在の最適化の状況に適応するためにSEO戦略をどのように変更すべきか

Baidu は予測不可能です。SEO に携わる多くの友人は、朝起きて Baidu を開き、検索ボック...