KSUIDジェネレーター:ユニークで時間順の識別子生成
分散システム、データベース、ユニークで時間順にソート可能なキーを必要とするアプリケーションで使用するためのKソート可能ユニーク識別子(KSUID)を生成します。KSUIDは、タイムスタンプとランダムデータを組み合わせて、衝突耐性のあるソート可能な識別子を作成します。
KSUIDジェネレーター
ドキュメンテーション
KSUIDジェネレーター
はじめに
KSUID(K-Sortable Unique IDentifier)は、従来のUUID(Universally Unique Identifier)やその他の識別子システムに対していくつかの利点を提供するユニークな識別子形式です。このツールを使用すると、KSUIDを迅速かつ簡単に生成できます。
KSUIDとは?
KSUIDは、次の要素から構成される20バイトのソート可能な識別子です。
- 32ビットのタイムスタンプ(4バイト)
- 16バイトのランダム性
文字列として表現されると、KSUIDはbase62でエンコードされ、27文字の長さになります。
KSUIDの構造
KSUIDの構造は次のように分解できます。
-
タイムスタンプ(4バイト):これは、Unixエポック(1970年1月1日00:00 UTC)からの秒数を表します。タイムスタンプにより、KSUIDは生成時間に基づいて大まかにソート可能です。
-
ランダムコンポーネント(16バイト):これは、同じ秒に複数のKSUIDが生成されても一意性を保証する暗号的に安全なランダム数です。
-
Base62エンコーディング:結合された20バイト(タイムスタンプ + ランダム)は、最終的な27文字の文字列を生成するためにbase62(A-Z、a-z、0-9)を使用してエンコードされます。
KSUIDの数式
KSUIDは次のように数学的に表現できます:
ここで:
- は32ビットのタイムスタンプ
- は128ビットのランダムコンポーネント
- は連結を示します
タイムスタンプは次のように計算されます:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
ここで、KSUID_epochは1400000000(2014-05-13T16:53:20Z)です。
KSUIDの構造図
KSUIDの使用例
KSUIDは以下のシナリオで特に有用です:
-
分散システム:複数のサーバーやサービス間で調整なしにユニークな識別子が必要な場合。
-
時間ソート可能なデータ:別のタイムスタンプを保存せずに、作成時間でデータをソートしたい場合。
-
データベースキー:特に自動インクリメント整数が適さない分散データベースのプライマリキーとして。
-
URL安全な識別子:Webアプリケーションのリソースのために短く、ユニークで、URL安全な識別子を作成するために。
-
ログ相関:マイクロサービスアーキテクチャ内の異なるサービス間でログエントリを相関させるために。
KSUIDの利点
KSUIDは他の識別子システムに対していくつかの利点を提供します:
-
ソート可能性:UUIDとは異なり、KSUIDは時間的にソート可能であり、データベースのインデックス作成やログ分析に役立ちます。
-
調整不要:自動インクリメントIDとは異なり、KSUIDは衝突のリスクなしに異なるサーバーによって独立して生成できます。
-
コンパクトな表現:27文字のKSUIDは、文字列として表現されたときにUUIDよりもコンパクトです。
-
埋め込まれたタイムスタンプ:埋め込まれたタイムスタンプにより、別のタイムスタンプフィールドを必要とせずに時間ベースのソートやフィルタリングが可能です。
-
URL安全:base62エンコーディングにより、KSUIDは追加のエンコーディングなしでURLで使用するのに安全です。
-
衝突確率の低減:16バイトのランダムコンポーネントにより、高い生成率でも衝突が非常に起こりにくくなります。
このジェネレーターの使い方
- 必要に応じて追加のパラメータを入力します(例:カスタムタイムスタンプ)。
- 「KSUIDを生成」ボタンをクリックして新しいKSUIDを作成します。
- 生成されたKSUIDが出力フィールドに表示されます。
- ステップ1〜3を繰り返すことで、複数のKSUIDを生成できます。
- 各KSUIDの隣にある「コピー」ボタンを使用して、クリップボードにコピーできます。
- 必要に応じて「エクスポート」機能を使用して生成されたKSUIDのリストをダウンロードできます。
各KSUIDはユニークであり、一度だけ使用する必要があります。ユニークな識別子が必要なたびに新しいKSUIDを生成してください。
コード例
さまざまなプログラミング言語でのKSUID生成の例を示します:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"生成されたKSUID: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`生成されたKSUID: ${newId}`)
6
1// Java
2import com.github.ksuid.KsuidGenerator;
3
4public class KsuidExample {
5 public static void main(String[] args) {
6 String newId = KsuidGenerator.generate();
7 System.out.println("生成されたKSUID: " + newId);
8 }
9}
10
1// C++
2#include <iostream>
3#include <ksuid/ksuid.hpp>
4
5int main() {
6 ksuid::Ksuid newId = ksuid::Ksuid::generate();
7 std::cout << "生成されたKSUID: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "生成されたKSUID: #{new_id}"
6
1// PHP
2<?php
3require_once 'vendor/autoload.php';
4
5use Tuupola\KsuidFactory;
6
7$factory = new KsuidFactory();
8$newId = $factory->create();
9echo "生成されたKSUID: " . $newId . "\n";
10?>
11
1// Go
2package main
3
4import (
5 "fmt"
6 "github.com/segmentio/ksuid"
7)
8
9func main() {
10 newId := ksuid.New()
11 fmt.Printf("生成されたKSUID: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("生成されたKSUID: \(newId)")
6
参考文献
- SegmentのKSUID GitHubリポジトリ: https://github.com/segmentio/ksuid
- 「良いユニーク識別子の生成」 by Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- KSUID仕様: https://github.com/segmentio/ksuid/blob/master/README.md
フィードバック
このツールについてフィードバックを開始するには、フィードバックトーストをクリックしてください。
関連ツール
ワークフローに役立つかもしれないさらなるツールを見つける