CUID Generator for Unique Identifiers in Distributed Systems
Generirajte unikatne identifikatorje (CUID) z odpornostjo proti trkom za porazdeljene sisteme, baze podatkov in spletne aplikacije. To orodje ustvarja CUID, ki so razširljivi, razvrščljivi in zelo malo verjetno, da se bodo trčili.
CUID Generator
Hitro in enostavno ustvarite ID, odporen na trke.
Struktura CUID
Časovni žig:
Naključno:
Dokumentacija
CUID Generator
Uvod
CUID (Collision-resistant Unique IDentifier) je edinstven identifikator, zasnovan tako, da je odporen na kolizije, horizontalno razširljiv in zaporedno razvrščen. CUID-i so še posebej uporabni v razdistributed sistemih, kjer je treba ustvariti edinstvene identifikatorje brez usklajevanja med vozlišči.
Struktura CUID-ov
CUID običajno sestavljajo naslednje komponente:
- Časovni žig: Predstavitev trenutnega časa
- Števec: Zaporedni števec za zagotavljanje edinstvenosti znotraj iste milisekunde
- Odtis stranke: Edinstven identifikator za stroj ali proces, ki generira CUID
- Naključna komponenta: Dodatni naključni podatki za nadaljnje zmanjšanje verjetnosti kolizij
Točna struktura se lahko razlikuje glede na implementacijo CUID-a, vendar te komponente delujejo skupaj, da ustvarijo edinstven in razvrščen identifikator.
Tukaj je vizualna predstavitev tipične strukture CUID-a:
Kako se CUID-i generirajo
CUID-i se generirajo z uporabo kombinacije časovno osnovanih in naključnih komponent. Postopek običajno vključuje:
- Pridobitev trenutnega časovnega žiga
- Povečanje števca (ki se občasno ponastavi)
- Generiranje odtisa stranke (ponavadi enkrat na sejo ali zagon aplikacije)
- Dodajanje naključnih podatkov
- Združevanje teh elementov v določenem formatu
Rezultantni CUID je običajno predstavljen kot niz črk in številk.
Prednosti in uporabe
CUID-i ponujajo več prednosti v primerjavi z drugimi sistemi edinstvenih identifikatorjev:
- Odporne na kolizije: Kombinacija časovnega žiga, števca in naključnih podatkov naredi kolizije izjemno malo verjetne, tudi v razdistributed sistemih.
- Horizontalna razširljivost: CUID-e je mogoče generirati neodvisno na več strojih brez usklajevanja.
- Zaporedno razvrščanje: Komponenta časovnega žiga omogoča kronološko razvrščanje CUID-ov.
- Prijazni do URL-jev: CUID-i so običajno sestavljeni iz znakov, ki so varni za URL.
Pogoste uporabe CUID-ov vključujejo:
- Primarni ključi v bazah podatkov
- Razdistributed sistemi, kjer je treba generirati edinstvene ID-je prek več vozlišč
- ID-ji sej v spletnih aplikacijah
- Sledenje dogodkom v analitičnih sistemih
- Imenovanje datotek ali virov v sistemih za oblačno shranjevanje
Kode Primeri
Tukaj so primeri generiranja CUID-ov v različnih programskih jezikih:
1// JavaScript (z uporabo knjižnice 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (z uporabo knjižnice 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (z uporabo 'cuid' gem)
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (z uporabo knjižnice '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# (z uporabo 'Cuid.Net' NuGet paketa)
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 (z uporabo paketa 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (z uporabo paketa '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 (z uporabo paketa 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (z uporabo lastne implementacije)
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 (z uporabo lastne implementacije)
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% Uporaba
12id = generateCUID();
13disp(id);
14
1## R (z uporabo lastne implementacije)
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## Uporaba
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (z uporabo lastne implementacije)
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' Uporaba v celici
17'=GenerateCUID()
18
Zgodovina in razvoj
CUID-e je prvotno razvil Eric Elliott leta 2012 kot rešitev za problem generiranja edinstvenih identifikatorjev v razdistributed sistemih. Koncept je bil navdihnjen z ID sistemom Twitter Snowflake, vendar zasnovan tako, da je lažje implementirati in uporabljati v različnih platformah.
Razvoj CUID-ov je bil usmerjen v potrebo po preprostem, odporne na kolizije ID sistemu, ki bi lahko deloval v različnih programskih jezikih in okoljih. Elliottov cilj je bil ustvariti sistem, ki je enostaven za implementacijo, ne zahteva centralnega usklajevanja in se lahko horizontalno razširi.
Od svojega začetka je CUID prešel skozi več iteracij in izboljšav:
- Prva implementacija CUID-a se je osredotočila na preprostost in enostavnost uporabe.
- Ko je uporaba rasla, je skupnost prispevala implementacije v različnih programskih jezikih.
- Leta 2021 je bila predstavljena CUID2, da bi odpravila nekatere omejitve prvotnega CUID-a in zagotovila še boljšo zmogljivost in odpornost na kolizije.
- CUID2 je izboljšal prvotnega z uporabo bolj varnega naključnega generatorja in povečanjem skupne dolžine identifikatorja.
Evolucija CUID-ov odraža spreminjajoče se potrebe razdistributed sistemov in stalna prizadevanja za ravnotežje med preprostostjo, varnostjo in zmogljivostjo pri generiranju edinstvenih identifikatorjev.
Reference
- Uradna CUID GitHub repozitorij
- CUID2 Specifikacija
- Elliott, Eric. "Generiranje edinstvenih ID-jev v razdistributed okolju." Medium, 2015.
- "ID-ji odporni na kolizije za razdistributed sisteme." DZone, 2018.
Ta orodje za generiranje CUID-ov vam omogoča hitro generiranje CUID-ov za vaše projekte. Preprosto kliknite gumb "Generiraj", da ustvarite nov CUID, in uporabite gumb "Kopiraj", da ga kopirate v odložišče za enostavno uporabo v vaših aplikacijah.
Povratne informacije
Kliknite na toast za povratne informacije, da začnete dajati povratne informacije o tem orodju
Sorodne orodja
Odkrijte več orodij, ki bi lahko bila koristna za vaš delovni proces