Генератор унікальних ідентифікаторів CUID для систем
Генеруйте унікальні ідентифікатори (CUID), стійкі до колізій, для розподілених систем, баз даних та веб-додатків. Цей інструмент створює CUID, які є масштабованими, сортованими та малоймовірно, що можуть зіткнутися.
Генератор CUID
Швидко та легко генеруйте ідентифікатор, стійкий до колізій.
Структура CUID
Часова мітка:
Випадковий:
Документація
Генератор CUID
Вступ
CUID (Collision-resistant Unique IDentifier) — це унікальний ідентифікатор, розроблений для того, щоб бути стійким до колізій, горизонтально масштабованим і послідовно сортуємим. CUID особливо корисні в розподілених системах, де потрібно генерувати унікальні ідентифікатори без координації між вузлами.
Структура CUID
CUID зазвичай складається з таких компонентів:
- Часова мітка: Представлення поточного часу
- Лічильник: Послідовний лічильник для забезпечення унікальності в межах тієї ж мілісекунди
- Відбиток клієнта: Унікальний ідентифікатор для машини або процесу, що генерує CUID
- Випадковий компонент: Додаткові випадкові дані для подальшого зменшення ймовірності колізії
Точна структура може варіюватися в залежності від реалізації CUID, але ці компоненти працюють разом, щоб створити унікальний та сортуємий ідентифікатор.
Ось візуальне представлення типової структури CUID:
Як генеруються CUID
CUID генеруються за допомогою комбінації часових та випадкових компонентів. Процес зазвичай включає:
- Отримання поточної часової мітки
- Інкрементування лічильника (який перезавантажується періодично)
- Генерацію відбитка клієнта (зазвичай виконується один раз за сесію або запуск програми)
- Додавання випадкових даних
- Комбінування цих елементів у специфічному форматі
Отриманий CUID зазвичай представляється у вигляді рядка літер і цифр.
Переваги та випадки використання
CUID пропонують кілька переваг у порівнянні з іншими системами унікальних ідентифікаторів:
- Стійкість до колізій: Комбінація часової мітки, лічильника та випадкових даних робить колізії вкрай малоймовірними, навіть у розподілених системах.
- Горизонтальна масштабованість: CUID можуть генеруватися незалежно на кількох машинах без координації.
- Послідовне сортування: Компонент часової мітки дозволяє хронологічно сортувати CUID.
- Дружні до URL: CUID зазвичай складаються з символів, безпечних для URL.
Звичайні випадки використання CUID включають:
- Первинні ключі бази даних
- Розподілені системи, де потрібно генерувати унікальні ID на кількох вузлах
- ID сесій у веб-додатках
- Відстеження подій у системах аналітики
- Іменування файлів або ресурсів у системах хмарного зберігання
Приклади коду
Ось приклади генерації CUID на різних мовах програмування:
1// JavaScript (використовуючи бібліотеку 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (використовуючи бібліотеку 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (використовуючи гем 'cuid')
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (використовуючи бібліотеку 'com.github.f4b6a3.cuid')
2import com.github.f4b6a3.cuid.Cuid;
3
4public class CuidExample {
5 public static void main(String[] args) {
6 String id = Cuid.createCuid();
7 System.out.println(id);
8 }
9}
10
1// C# (використовуючи пакет NuGet 'Cuid.Net')
2using Cuid;
3
4class Program
5{
6 static void Main(string[] args)
7 {
8 string id = CuidGenerator.Generate();
9 Console.WriteLine(id);
10 }
11}
12
1// PHP (використовуючи пакет 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (використовуючи пакет 'github.com/lucsky/cuid')
2package main
3
4import (
5 "fmt"
6 "github.com/lucsky/cuid"
7)
8
9func main() {
10 id := cuid.New()
11 fmt.Println(id)
12}
13
1// Swift (використовуючи пакет 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (використовуючи власну реалізацію)
2#include <iostream>
3#include <chrono>
4#include <random>
5#include <sstream>
6#include <iomanip>
7
8std::string generateCUID() {
9 auto now = std::chrono::system_clock::now();
10 auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
11 auto value = now_ms.time_since_epoch();
12 long duration = value.count();
13
14 std::random_device rd;
15 std::mt19937 gen(rd());
16 std::uniform_int_distribution<> dis(0, 35);
17
18 std::stringstream ss;
19 ss << 'c';
20 ss << std::hex << std::setfill('0') << std::setw(8) << duration;
21 for (int i = 0; i < 8; i++) {
22 int r = dis(gen);
23 ss << (char)(r < 10 ? '0' + r : 'a' + r - 10);
24 }
25 return ss.str();
26}
27
28int main() {
29 std::string id = generateCUID();
30 std::cout << id << std::endl;
31 return 0;
32}
33
1% MATLAB (використовуючи власну реалізацію)
2function id = generateCUID()
3 timestamp = dec2hex(round(posixtime(datetime('now'))*1000), 8);
4 random = '';
5 for i = 1:8
6 random = [random char(randi([48 57 97 122]))];
7 end
8 id = ['c' timestamp random];
9end
10
11% Використання
12id = generateCUID();
13disp(id);
14
1## R (використовуючи власну реалізацію)
2library(lubridate)
3
4generate_cuid <- function() {
5 timestamp <- format(as.numeric(now()) * 1000, scientific = FALSE)
6 timestamp <- substr(timestamp, 1, 8)
7 random <- paste0(sample(c(0:9, letters[1:6]), 8, replace = TRUE), collapse = "")
8 paste0("c", timestamp, random)
9}
10
11## Використання
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (використовуючи власну реалізацію)
2Function GenerateCUID() As String
3 Dim timestamp As String
4 Dim random As String
5 Dim i As Integer
6
7 timestamp = Right("00000000" & Hex(CLng(CDbl(Now()) * 86400000)), 8)
8
9 For i = 1 To 8
10 random = random & Mid("0123456789abcdef", Int(Rnd() * 16) + 1, 1)
11 Next i
12
13 GenerateCUID = "c" & timestamp & random
14End Function
15
16' Використання в клітинці
17'=GenerateCUID()
18
Історія та розвиток
CUID були спочатку розроблені Еріком Елліотом у 2012 році як рішення проблеми генерації унікальних ідентифікаторів у розподілених системах. Концепція була натхненна системою ідентифікаторів Snowflake від Twitter, але розроблена для більш простого впровадження та використання на різних платформах.
Розвиток CUID був зумовлений необхідністю простого, стійкого до колізій ID-системи, яка могла б працювати на різних мовах програмування та в різних середовищах. Метою Елліота було створити систему, яка була б легкою у впровадженні, не вимагала центральної координації та могла б горизонтально масштабуватися.
З моменту свого виникнення CUID пройшли кілька ітерацій та покращень:
- Оригінальна реалізація CUID зосереджувалася на простоті та зручності використання.
- З ростом популярності спільнота внесла реалізації на різних мовах програмування.
- У 2021 році була представлена CUID2, щоб усунути деякі обмеження оригінального CUID та забезпечити ще кращу продуктивність і стійкість до колізій.
- CUID2 покращила оригінал, використовуючи більш безпечний генератор випадкових чисел і збільшуючи загальну довжину ідентифікатора.
Еволюція CUID відображає змінювані потреби розподілених систем і постійні зусилля з балансування простоти, безпеки та продуктивності в генерації унікальних ідентифікаторів.
Посилання
- Офіційний репозиторій CUID на GitHub
- Специфікація CUID2
- Елліот, Ерік. "Генерація унікальних ID в розподіленому середовищі." Medium, 2015.
- "Стійкі до колізій ID для розподілених систем." DZone, 2018.
Цей інструмент генерації CUID дозволяє швидко генерувати CUID для ваших проектів. Просто натисніть кнопку "Генерувати", щоб створити новий CUID, і використовуйте кнопку "Копіювати", щоб скопіювати його в буфер обміну для легкого використання у ваших додатках.
Зворотній зв'язок
Клацніть на спливаюче вікно зворотного зв'язку, щоб почати надавати відгуки про цей інструмент
Пов'язані Інструменти
Відкрийте більше інструментів, які можуть бути корисними для вашого робочого процесу