Генератор 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 могут быть сгенерированы независимо разными серверами без риска коллизий.
-
Компактное представление: Длина KSUID составляет 27 символов, что меньше, чем у 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
Обратная связь
Нажмите на уведомление об обратной связи, чтобы начать оставлять отзыв об этом инструменте
Связанные инструменты
Откройте для себя больше инструментов, которые могут быть полезны для вашего рабочего процесса