Генератор ULID
Згенерований ULID:
Структура ULID
Часова мітка (10 символів)
Випадковість (16 символів)
Генератор ULID
Вступ
ULID (Універсальний Унікальний Лексикографічно Сортований Ідентифікатор) — це унікальний ідентифікатор, який поєднує в собі часову мітку з випадковими даними для створення рядка з 26 символів. ULID розроблені для того, щоб бути лексикографічно сортованими, зберігаючи при цьому високий ступінь унікальності та випадковості.
Структура ULID
ULID складається з двох основних частин:
- Часова мітка (10 символів): Перші 10 символів представляють час у мілісекундах з моменту Unix Epoch (1970-01-01).
- Випадковість (16 символів): Решта 16 символів генеруються за допомогою криптографічно безпечних випадкових даних.
Отриманий 26-символьний рядок кодується за допомогою алфавіту бази 32 Крокфорда (0-9 та A-Z, виключаючи I, L, O та U).
Формула
ULID генерується за допомогою наступних кроків:
- Згенерувати 48-бітну часову мітку (мілісекунди з моменту Unix Epoch).
- Згенерувати 80 біт криптографічно безпечних випадкових даних.
- Закодувати об'єднані 128 біт за допомогою кодування бази 32 Крокфорда.
Обчислення
Генератор ULID виконує наступні кроки:
- Отримати поточну часову мітку в мілісекундах.
- Згенерувати 10 випадкових байтів (80 біт) за допомогою криптографічно безпечного генератора випадкових чисел.
- Об'єднати часову мітку та випадкові дані в 128-бітне ціле число.
- Закодувати 128-бітне ціле число за допомогою кодування бази 32 Крокфорда.
Сценарії використання
ULID корисні в різних сценаріях, зокрема:
- Ключі бази даних: ULID можуть використовуватися як унікальні ідентифікатори для записів у базі даних, забезпечуючи унікальність і сортованість.
- Розподілені системи: У розподілених середовищах ULID можуть генеруватися без координації між вузлами.
- Логування та трасування: ULID можуть використовуватися для позначення записів журналу або трасування подій, надаючи сортований і унікальний ідентифікатор.
- URL-дружні ідентифікатори: ULID безпечні для URL і можуть використовуватися в веб-додатках як ідентифікатори в URL.
Альтернативи
Хоча ULID є універсальними, існують й інші системи унікальних ідентифікаторів, які варто розглянути:
- UUID (Універсальний Унікальний Ідентифікатор): 128-бітний ідентифікатор, який не містить компонента часової мітки.
- KSUID (K-Сортований Унікальний Ідентифікатор): Подібний до ULID, але з іншим кодуванням часової мітки.
- Snowflake ID: Система генерації розподілених унікальних ID від Twitter, яка включає часову мітку та ID робочого вузла.
Історія
ULID були представлені в 2016 році Алізаїном Феерастою як альтернатива UUID. Вони були розроблені для вирішення деяких обмежень UUID, особливо в термінах сортованості та читабельності. Специфікація ULID залишалася стабільною з моменту її впровадження, з різними реалізаціями, доступними на різних мовах програмування.
Приклади
Ось кілька прикладів коду для генерації ULID на різних мовах програмування:
// Реалізація на JavaScript
function generateULID() {
const timestamp = Date.now().toString(36).padStart(10, '0');
const randomness = crypto.getRandomValues(new Uint8Array(16))
.reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
return (timestamp + randomness).toUpperCase();
}
console.log(generateULID());
Ці приклади демонструють, як генерувати ULID на JavaScript, Python і Java. Ви можете адаптувати ці функції під свої специфічні потреби або інтегрувати їх у більші системи, які потребують унікальних ідентифікаторів.
Посилання
- "Специфікація ULID." GitHub, https://github.com/ulid/spec. Доступно 2 серпня 2024 року.
- "Кодування бази 32 Крокфорда." Кодування бази 32, http://www.crockford.com/base32.html. Доступно 2 серпня 2024 року.
- "UUID проти ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Доступно 2 серпня 2024 року.