CUID Generator for Scalable and Collision-Resistant IDs
Generujte jedinečné identifikátory (CUID) odolné voči kolíziám pre distribuované systémy, databázy a webové aplikácie. Tento nástroj vytvára CUID, ktoré sú škálovateľné, usporiadateľné a veľmi nepravdepodobné, že dôjde k ich kolízii.
Generátor CUID
Rýchlo a jednoducho generujte ID odolné voči kolíziám.
Štruktúra CUID
Časová pečiatka:
Náhodné:
Dokumentácia
Generátor CUID
Úvod
CUID (Collision-resistant Unique IDentifier) je jedinečný identifikátor navrhnutý tak, aby bol odolný voči kolíziám, horizontálne škálovateľný a sekvenčne usporiadaný. CUID-y sú obzvlášť užitočné v distribuovaných systémoch, kde je potrebné generovať jedinečné identifikátory bez koordinácie medzi uzlami.
Štruktúra CUID-ov
CUID sa typicky skladá z nasledujúcich komponentov:
- Časová pečiatka: Reprezentácia aktuálneho času
- Čítač: Sekvenčný čítač na zabezpečenie jedinečnosti v rámci tej istej milisekundy
- Odtlačok klienta: Jedinečný identifikátor pre stroj alebo proces generujúci CUID
- Náhodná zložka: Dodatočné náhodné údaje na ďalšie zníženie pravdepodobnosti kolízií
Presná štruktúra sa môže líšiť v závislosti od implementácie CUID, ale tieto komponenty spolupracujú na vytvorení jedinečného a usporiadateľného identifikátora.
Tu je vizuálne znázornenie typickej štruktúry CUID:
Ako sa generujú CUID-y
CUID-y sa generujú pomocou kombinácie časových a náhodných komponentov. Proces typicky zahŕňa:
- Získanie aktuálnej časovej pečiatky
- Inkrementácia čítača (ktorý sa periodicky resetuje)
- Generovanie odtlačku klienta (zvyčajne sa robí raz na reláciu alebo pri spustení aplikácie)
- Pridanie náhodných údajov
- Kombinovanie týchto prvkov v špecifickom formáte
Výsledný CUID sa zvyčajne reprezentuje ako reťazec písmen a čísel.
Výhody a použitia
CUID-y ponúkajú niekoľko výhod oproti iným systémom jedinečných identifikátorov:
- Odolnosť voči kolíziám: Kombinácia časovej pečiatky, čítača a náhodných údajov robí kolízie extrémne nepravdepodobnými, aj v distribuovaných systémoch.
- Horizontálna škálovateľnosť: CUID-y môžu byť generované nezávisle na viacerých strojoch bez koordinácie.
- Sekvenčné usporiadanie: Komponenta časovej pečiatky umožňuje chronologické usporiadanie CUID-ov.
- Bezpečné pre URL: CUID-y sa zvyčajne skladajú z URL-bezpečných znakov.
Bežné použitia CUID-ov zahŕňajú:
- Primárne kľúče databázy
- Distribuované systémy, kde je potrebné generovať jedinečné ID naprieč viacerými uzlami
- ID relácií vo webových aplikáciách
- Sledovanie udalostí v analytických systémoch
- Názvoslovie súborov alebo zdrojov v cloudových úložiskách
Kódové príklady
Tu sú príklady generovania CUID-ov v rôznych programovacích jazykoch:
1// JavaScript (používajúci knižnicu 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (používajúci knižnicu 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (používajúci gem 'cuid')
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (používajúci knižnicu '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# (používajúci balík 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 (používajúci balík 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (používajúci balík '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 (používajúci balík 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (používajúci vlastnú implementáciu)
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 (používajúci vlastnú implementáciu)
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% Použitie
12id = generateCUID();
13disp(id);
14
1## R (používajúci vlastnú implementáciu)
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## Použitie
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (používajúci vlastnú implementáciu)
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' Použitie v bunke
17'=GenerateCUID()
18
História a vývoj
CUID-y boli pôvodne vyvinuté Ericom Elliottom v roku 2012 ako riešenie problému generovania jedinečných identifikátorov v distribuovaných systémoch. Koncept bol inšpirovaný systémom ID Snowflake od Twitteru, ale navrhnutý tak, aby bol jednoduchšie implementovateľný a použiteľný naprieč rôznymi platformami.
Vývoj CUID-ov bol poháňaný potrebou jednoduchého, odolného ID systému, ktorý by mohol fungovať naprieč rôznymi programovacími jazykmi a prostrediami. Elliottovým cieľom bolo vytvoriť systém, ktorý by bol ľahko implementovateľný, nevyžadoval centrálnu koordináciu a mohol by sa horizontálne škálovať.
Od svojho vzniku prešli CUID-y niekoľkými iteráciami a vylepšeniami:
- Pôvodná implementácia CUID sa zameriavala na jednoduchosť a ľahké použitie.
- S rastom adopcie prispela komunita implementáciami v rôznych programovacích jazykoch.
- V roku 2021 bola predstavená CUID2 na riešenie niektorých obmedzení pôvodného CUID a poskytovanie ešte lepšej výkonnosti a odolnosti voči kolíziám.
- CUID2 vylepšil pôvodný koncept použitím bezpečnejšieho generátora náhodných čísel a zvýšením celkovej dĺžky identifikátora.
Evolúcia CUID-ov odráža meniace sa potreby distribuovaných systémov a neustále úsilie o vyváženie jednoduchosti, bezpečnosti a výkonu pri generovaní jedinečných identifikátorov.
Odkazy
- Oficiálne CUID GitHub úložisko
- Špecifikácia CUID2
- Elliott, Eric. "Generovanie jedinečných ID v distribuovanom prostredí." Medium, 2015.
- "Odolné ID pre distribuované systémy." DZone, 2018.
Tento nástroj na generovanie CUID vám umožňuje rýchlo generovať CUID-y pre vaše projekty. Jednoducho kliknite na tlačidlo "Generovať" a vytvorte nový CUID, a použite tlačidlo "Kopírovať", aby ste ho skopírovali do schránky pre jednoduché použitie vo vašich aplikáciách.
Spätná väzba
Kliknite na toast so spätnou väzbou, aby ste začali dávať spätnú väzbu o tomto nástroji
Súvisiace nástroje
Objavte ďalšie nástroje, ktoré by mohli byť užitočné pre váš pracovný tok