Генератор K-сортованих унікальних ідентифікаторів (KSUID)
Генеруйте K-сортовані унікальні ідентифікатори (KSUID) для використання в розподілених системах, базах даних та додатках, які потребують унікальних, час-сортованих ключів. KSUID поєднує часову мітку з випадковими даними, щоб створити стійкі до колізій, сортовані ідентифікатори.
Генератор KSUID
Документація
Генератор KSUID
Вступ
KSUID (K-Sortable Unique IDentifier) - це формат унікального ідентифікатора, який пропонує кілька переваг у порівнянні з традиційними UUID (Універсальний унікальний ідентифікатор) та іншими системами ідентифікації. Цей інструмент дозволяє швидко та легко генерувати KSUID.
Що таке KSUID?
KSUID - це 20-байтовий сортувальний ідентифікатор, який складається з:
- 32-бітного таймстемпа (4 байти)
- 16 байтів випадковості
При представленні у вигляді рядка, KSUID кодується в base62 і має довжину 27 символів.
Структура KSUID
Структура KSUID може бути розбита на такі частини:
-
Таймстемп (4 байти): Це представляє кількість секунд з моменту Unix-епохи (1 січня 1970 року, 00:00 UTC). Таймстемп дозволяє KSUID бути приблизно сортуємими за часом генерації.
-
Випадковий компонент (16 байтів): Це криптографічно безпечне випадкове число, яке забезпечує унікальність, навіть коли кілька KSUID генеруються в одну секунду.
-
Кодування Base62: Об'єднані 20 байтів (таймстемп + випадковість) потім кодуються за допомогою base62 (A-Z, a-z, 0-9), щоб отримати фінальний рядок з 27 символів.
Формула 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-ідентифікатори: Для створення коротких, унікальних, безпечних для URL ідентифікаторів для ресурсів у веб-додатках.
-
Кореляція журналів: Для кореляції записів журналів між різними службами в архітектурі мікросервісів.
Переваги KSUID
KSUID пропонують кілька переваг у порівнянні з іншими системами ідентифікації:
-
Сортування: На відміну від UUID, KSUID можуть бути відсортовані хронологічно, що корисно для індексації бази даних та аналізу журналів.
-
Не потрібна координація: На відміну від автоінкрементних ідентифікаторів, KSUID можуть бути згенеровані незалежно різними серверами без ризику зіткнень.
-
Компактне представлення: У 27 символів KSUID є більш компактними, ніж UUID, коли представлені у вигляді рядків.
-
Вбудований таймстемп: Вбудований таймстемп дозволяє виконувати сортування та фільтрацію на основі часу без необхідності зберігати окреме поле таймстемпа.
-
Безпечні для URL: Кодування base62 робить KSUID безпечними для використання в URL без будь-якого додаткового кодування.
-
Знижена ймовірність зіткнень: 16-байтовий випадковий компонент робить зіткнення надзвичайно малоймовірними, навіть при високих швидкостях генерації.
Як користуватися цим генератором
- Введіть будь-які додаткові параметри, якщо це необхідно (наприклад, користувацький таймстемп).
- Натисніть кнопку "Генерувати KSUID", щоб створити новий KSUID.
- Згенерований KSUID буде відображено у вихідному полі.
- Ви можете генерувати кілька KSUID, повторюючи кроки 1-3.
- Використовуйте кнопку "Копіювати" поруч з кожним 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
Посилання
- Репозиторій KSUID на GitHub від Segment: https://github.com/segmentio/ksuid
- "Генерація хороших унікальних ідентифікаторів" Пітера Боргона: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- Специфікація KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
Відгуки
Натисніть на тост відгуку, щоб почати залишати відгук про цей інструмент
Супутні інструменти
Відкрийте для себе більше інструментів, які можуть бути корисними для вашого робочого процесу