CUID Generator for Unique Identifiers in Distributed Systems
Generuokite kolizijoms atsparius unikalius identifikatorius (CUID) paskirstytoms sistemoms, duomenų bazėms ir internetinėms programoms. Šis įrankis kuria CUID, kurie yra skalaujami, rūšiuojami ir labai mažai tikėtina, kad susidurs.
CUID Generatorius
Greitai ir lengvai generuokite kolizijoms atsparų ID.
CUID struktūra
Laiko žyma:
Atsitiktinis:
Dokumentacija
CUID Generator
Įvadas
CUID (Collision-resistant Unique IDentifier) yra unikalus identifikatorius, sukurtas taip, kad būtų atsparus kolizijoms, horizontaliai skalabilus ir sekuojamas. CUID yra ypač naudingas paskirstytose sistemose, kuriose unikalūs identifikatoriai turi būti generuojami be koordinavimo tarp mazgų.
CUID struktūra
CUID paprastai susideda iš šių komponentų:
- Laiko žyma: dabartinio laiko atvaizdavimas
- Skaitiklis: sekos skaitiklis, užtikrinantis unikalumą toje pačioje milisekundėje
- Kliento pirštų atspaudas: unikalus identifikatorius mašinai ar procesui, generuojančiam CUID
- Atsitiktinis komponentas: papildomi atsitiktiniai duomenys, siekiant dar labiau sumažinti kolizijų tikimybę
Tiksli struktūra gali skirtis priklausomai nuo CUID įgyvendinimo, tačiau šie komponentai veikia kartu, kad sukurtų unikalų ir sekuojamą identifikatorių.
Štai vizualinis tipinio CUID struktūros atvaizdavimas:
Kaip generuojami CUID
CUID generuojami naudojant laiko ir atsitiktinių komponentų derinį. Procesas paprastai apima:
- Gauti dabartinę laiko žymą
- Padidinti skaitiklį (kuris periodiškai atsinaujina)
- Generuoti kliento pirštų atspaudą (paprastai atliekama vieną kartą per sesiją arba programos paleidimą)
- Pridėti atsitiktinius duomenis
- Sujungti šiuos elementus tam tikru formatu
Gautas CUID paprastai atvaizduojamas kaip raidžių ir skaičių eilutė.
Privalumai ir naudojimo atvejai
CUID siūlo kelis privalumus palyginti su kitomis unikalių identifikatorių sistemomis:
- Atsparumas kolizijoms: laiko žymos, skaitiklio ir atsitiktinių duomenų derinys daro kolizijas ekstremaliai mažai tikėtinas, net ir paskirstytose sistemose.
- Horizontalus skalavimas: CUID gali būti generuojami nepriklausomai keliuose kompiuteriuose be koordinavimo.
- Sekvencinis rūšiavimas: laiko žymos komponentas leidžia chronologiškai rūšiuoti CUID.
- URL draugiški: CUID paprastai sudaryti iš URL saugių simbolių.
Dažniausiai naudojami CUID atvejai apima:
- Duomenų bazės pirminius raktus
- Paskirstytas sistemas, kuriose unikalūs ID turi būti generuojami keliuose mazguose
- Sesijos ID internetinėse programose
- Įvykių sekimas analitikos sistemose
- Failų ar išteklių pavadinimai debesų saugojimo sistemose
Kodo pavyzdžiai
Štai pavyzdžiai, kaip generuoti CUID įvairiose programavimo kalbose:
1// JavaScript (naudojant 'cuid' biblioteką)
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (naudojant 'cuid' biblioteką)
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (naudojant 'cuid' gem)
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (naudojant 'com.github.f4b6a3.cuid' biblioteką)
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# (naudojant 'Cuid.Net' NuGet paketą)
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 (naudojant 'endyjasmi/cuid' paketą)
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (naudojant 'github.com/lucsky/cuid' paketą)
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 (naudojant 'CUID' paketą)
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (naudojant savarankišką įgyvendinimą)
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 (naudojant savarankišką įgyvendinimą)
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% Naudojimas
12id = generateCUID();
13disp(id);
14
1## R (naudojant savarankišką įgyvendinimą)
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## Naudojimas
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (naudojant savarankišką įgyvendinimą)
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' Naudojimas ląstelėje
17'=GenerateCUID()
18
Istorija ir plėtra
CUID buvo iš pradžių sukurtas Eric Elliott 2012 m. kaip sprendimas unikalių identifikatorių generavimo problemoms paskirstytose sistemose. Koncepcija buvo įkvėpta Twitter sniego kristalo ID sistemos, tačiau buvo sukurta taip, kad būtų lengviau įgyvendinama ir naudojama įvairiose platformose.
CUID plėtra buvo skatinama poreikio turėti paprastą, atsparų kolizijoms ID sistemą, kuri galėtų veikti įvairiose programavimo kalbose ir aplinkose. Elliott tikslas buvo sukurti sistemą, kuri būtų lengvai įgyvendinama, nereikalautų centrinio koordinavimo ir galėtų horizontaliai skalotis.
Nuo pat savo atsiradimo CUID praėjo kelis etapus ir patobulinimus:
- Pirmasis CUID įgyvendinimas buvo orientuotas į paprastumą ir naudojimo patogumą.
- Augant naudojimui, bendruomenė prisidėjo prie įgyvendinimų įvairiose programavimo kalbose.
- 2021 m. buvo pristatytas CUID2, siekiant išspręsti kai kurias originalaus CUID ribas ir suteikti dar geresnį našumą bei atsparumą kolizijoms.
- CUID2 patobulino originalą, naudodamas saugesnį atsitiktinių skaičių generatorių ir padidindamas identifikatoriaus ilgį.
CUID evoliucija atspindi besikeičiančius paskirstytų sistemų poreikius ir nuolatines pastangas subalansuoti paprastumą, saugumą ir našumą unikalių identifikatorių generavime.
Nuorodos
- Oficiali CUID GitHub saugykla
- CUID2 specifikacija
- Elliott, Eric. "Unikalių ID generavimas paskirstytoje aplinkoje." Medium, 2015.
- "Atsparūs kolizijoms ID paskirstytoms sistemoms." DZone, 2018.
Šis CUID generatorius leidžia greitai generuoti CUID savo projektams. Tiesiog paspauskite mygtuką "Generuoti", kad sukurtumėte naują CUID, ir naudokite mygtuką "Kopijuoti", kad nukopijuotumėte jį į savo iškarpinę, kad būtų lengva naudoti savo programose.
Atsiliepimai
Spauskite atsiliepimų pranešimą, kad pradėtumėte palikti atsiliepimą apie šį įrankį
Susiję įrankiai
Atraskite daugiau įrankių, kurie gali būti naudingi jūsų darbo procesui