Генератор на уникални идентификатори CUID за приложения
Генерирайте уникални идентификатори (CUID), устойчиви на сблъсъци, за разпределени системи, бази данни и уеб приложения. Този инструмент създава CUID, които са мащабируеми, сортирани и с много малка вероятност да се сблъскат.
Генератор на CUID
Бързо и лесно генерирайте ID, устойчиво на сблъсъци.
Структура на CUID
Времеви печат:
Случаен:
Документация
Генератор на CUID
Въведение
CUID (Collision-resistant Unique IDentifier) е уникален идентификатор, проектиран да бъде устойчив на сблъсъци, хоризонтално мащабируем и последователно сортиран. CUID-ите са особено полезни в разпределени системи, където уникални идентификатори трябва да бъдат генерирани без координация между възлите.
Структура на CUID-ите
CUID обикновено се състои от следните компоненти:
- Времеви печат: Представление на текущото време
- Личен номер: Последователен номер, за да се осигури уникалност в рамките на същата милисекунда
- Клиентски отпечатък: Уникален идентификатор за машината или процеса, генериращ CUID
- Случаен компонент: Допълнителни случайни данни, за да се намали допълнително вероятността от сблъсъци
Точната структура може да варира в зависимост от реализацията на CUID, но тези компоненти работят заедно, за да създадат уникален и сортиран идентификатор.
Ето визуално представяне на типичната структура на CUID:
Как се генерират CUID-ите
CUID-ите се генерират, използвайки комбинация от времеви и случайни компоненти. Процесът обикновено включва:
- Получаване на текущия времеви печат
- Увеличаване на личния номер (който се нулира периодично)
- Генериране на клиентски отпечатък (обикновено се извършва веднъж на сесия или стартиране на приложението)
- Добавяне на случайни данни
- Комбиниране на тези елементи в специфичен формат
Резултатният CUID обикновено се представя като низ от букви и цифри.
Предимства и случаи на употреба
CUID-ите предлагат няколко предимства пред други системи за уникални идентификатори:
- Устойчивост на сблъсъци: Комбинацията от времеви печат, личен номер и случайни данни прави сблъсъците изключително малко вероятни, дори в разпределени системи.
- Хоризонтално мащабиране: CUID-ите могат да бъдат генерирани независимо на множество машини без координация.
- Последователно сортиране: Компонентът на времевия печат позволява хронологично сортиране на CUID-ите.
- URL-приятелски: CUID-ите обикновено са съставени от символи, безопасни за URL.
Общи случаи на употреба на CUID-ите включват:
- Основни ключове на база данни
- Разпределени системи, където уникални 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# (използвайки пакета 'Cuid.Net' от NuGet)
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 г. като решение на проблема с генерирането на уникални идентификатори в разпределени системи. Концепцията е вдъхновена от системата за ID на Twitter Snowflake, но проектирана да бъде по-лесно реализирана и използвана в различни платформи.
Развитието на CUID-ите е движено от необходимостта от проста, устойчива на сблъсъци система за идентификатори, която може да работи в различни програмни езици и среди. Целта на Елиът беше да създаде система, която е лесна за реализиране, не изисква централна координация и може да мащабира хоризонтално.
От създаването си, CUID е преминал през няколко итерации и подобрения:
- Първоначалната реализация на CUID се фокусираше върху простота и лесна употреба.
- С нарастващата популярност, общността допринесе с реализации на различни програмни езици.
- През 2021 г. беше представен CUID2, за да се адресират някои ограничения на оригиналния CUID и да се предостави дори по-добра производителност и устойчивост на сблъсъци.
- CUID2 подобри оригинала, като използва по-сигурен генератор на случайни числа и увеличи общата дължина на идентификатора.
Еволюцията на CUID-ите отразява променящите се нужди на разпределените системи и непрекъснатите усилия за балансиране на простота, сигурност и производителност в генерирането на уникални идентификатори.
Референции
- Официално хранилище на CUID в GitHub
- Спецификация на CUID2
- Елиът, Ерик. "Генериране на уникални ID-та в разпределена среда." Medium, 2015.
- "Идентификатори, устойчиви на сблъсъци за разпределени системи." DZone, 2018.
Този инструмент за генериране на CUID ви позволява бързо да генерирате CUID-и за вашите проекти. Просто натиснете бутона "Генерирай", за да създадете нов CUID, и използвайте бутона "Копирай", за да го копирате в клипборда си за лесна употреба в приложенията ви.
Свързани инструменти
Открийте още инструменти, които може да бъдат полезни за вашия работен процес