Генератор на уникални идентификатори 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, и използвайте бутона "Копирай", за да го копирате в клипборда си за лесна употреба в приложенията ви.
Обратна връзка
Щракнете върху тост за обратна връзка, за да започнете да давате обратна връзка за този инструмент
Свързани инструменти
Открийте още инструменти, които могат да бъдат полезни за вашия работен процес