CUID Generátor: Ütközésálló azonosítók generálása
Ütközésálló egyedi azonosítók (CUID-ok) generálása elosztott rendszerekhez, adatbázisokhoz és webalkalmazásokhoz. Ez az eszköz olyan CUID-okat hoz létre, amelyek skálázhatók, rendezhetők, és rendkívül valószínűtlen, hogy ütközzenek.
CUID Generátor
Generálj ütközés-ellenálló azonosítót gyorsan és egyszerűen.
CUID Felépítése
Időbélyeg:
Véletlenszerű:
Dokumentáció
CUID Generátor
Bevezetés
A CUID (Ütközés-ellenálló Egyedi Azonosító) egy olyan egyedi azonosító, amelyet úgy terveztek, hogy ütközés-ellenálló, horizontálisan skálázható és sorrendben rendezhető legyen. A CUID-ok különösen hasznosak elosztott rendszerekben, ahol az egyedi azonosítóknak koordináció nélkül kell generálódniuk a csomópontok között.
A CUID-ok szerkezete
A CUID általában a következő összetevőkből áll:
- Időbélyeg: A jelenlegi idő reprezentációja
- Számláló: Egy sorozatos számláló, amely biztosítja az egyediséget ugyanabban a milliszekundumban
- Ügyfélujjlenyomat: Egyedi azonosító a gép vagy folyamat számára, amely a CUID-ot generálja
- Véletlenszerű összetevő: További véletlenszerű adat az ütközési valószínűség csökkentésére
A pontos szerkezet a CUID implementációjától függően változhat, de ezek az összetevők együtt dolgoznak, hogy egy egyedi és rendezhető azonosítót hozzanak létre.
Íme egy vizuális ábrázolása egy tipikus CUID szerkezetének:
Hogyan generálják a CUID-okat
A CUID-okat időalapú és véletlenszerű összetevők kombinációjával generálják. A folyamat általában a következő lépéseket tartalmazza:
- A jelenlegi időbélyeg lekérése
- Egy számláló növelése (amely időszakosan visszaáll)
- Ügyfélujjlenyomat generálása (általában egyszer a munkamenet vagy alkalmazás indításakor)
- Véletlenszerű adatok hozzáadása
- Ezeknek az elemeknek a kombinálása egy adott formátumban
A kapott CUID-t általában betűk és számok sorozataként ábrázolják.
Előnyök és felhasználási esetek
A CUID-ok számos előnnyel rendelkeznek más egyedi azonosító rendszerekkel szemben:
- Ütközés-ellenállás: Az időbélyeg, a számláló és a véletlenszerű adatok kombinációja rendkívül valószínűtlenné teszi az ütközéseket, még elosztott rendszerekben is.
- Horizontális skálázhatóság: A CUID-ok függetlenül generálhatók több gépen koordináció nélkül.
- Sorrend szerinti rendezés: Az időbélyeg összetevő lehetővé teszi a CUID-ok kronológiai rendezését.
- URL-barát: A CUID-ok általában URL-biztonságos karakterekből állnak.
A CUID-ok gyakori felhasználási esetei közé tartozik:
- Adatbázis elsődleges kulcsai
- Elosztott rendszerek, ahol egyedi ID-kat kell generálni több csomóponton
- Munkamenet ID-k webalkalmazásokban
- Események nyomon követése analitikai rendszerekben
- Fájlok vagy erőforrások elnevezése felhőtárolási rendszerekben
Kódpéldák
Íme példák CUID-ok generálására különböző programozási nyelveken:
1// JavaScript (a 'cuid' könyvtár használatával)
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (a 'cuid' könyvtár használatával)
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (a 'cuid' gem használatával)
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (a 'com.github.f4b6a3.cuid' könyvtár használatával)
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# (a 'Cuid.Net' NuGet csomag használatával)
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 (a 'endyjasmi/cuid' csomag használatával)
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (a 'github.com/lucsky/cuid' csomag használatával)
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 (a 'CUID' csomag használatával)
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (egy egyedi implementáció használatával)
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 (egy egyedi implementáció használatával)
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% Használat
12id = generateCUID();
13disp(id);
14
1## R (egy egyedi implementáció használatával)
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## Használat
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (egy egyedi implementáció használatával)
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' Használat egy cellában
17'=GenerateCUID()
18
Történelem és fejlesztés
A CUID-okat Eric Elliott fejlesztette ki 2012-ben, mint megoldást az egyedi azonosítók generálásának problémájára elosztott rendszerekben. A koncepció a Twitter Snowflake ID rendszeréből merített inspirációt, de úgy tervezték, hogy könnyebben implementálható és használható legyen különböző platformokon.
A CUID-ok fejlesztését az a szükséglet vezérelte, hogy egy egyszerű, ütközés-ellenálló azonosítórendszert hozzanak létre, amely különböző programozási nyelveken és környezetekben működhet. Elliott célja egy olyan rendszer létrehozása volt, amely könnyen implementálható, nem igényel központi koordinációt, és képes horizontálisan skálázódni.
A CUID-ok bevezetése óta több iteráción és fejlesztésen mentek keresztül:
- Az eredeti CUID implementáció a egyszerűségre és a használhatóságra összpontosított.
- Ahogy a használat nőtt, a közösség hozzájárult különböző programozási nyelvekben való implementációkkal.
- 2021-ben bemutatták a CUID2-t, hogy kezelje az eredeti CUID néhány korlátját és még jobb teljesítményt és ütközés-ellenállást biztosítson.
- A CUID2 javította az eredetit azáltal, hogy biztonságosabb véletlenszám-generátort használt, és növelte az azonosító teljes hosszát.
A CUID-ok fejlődése tükrözi az elosztott rendszerek változó igényeit és az egyedi azonosítók generálásában a egyszerűség, a biztonság és a teljesítmény közötti egyensúly megteremtésére irányuló folyamatos erőfeszítéseket.
Hivatkozások
- Hivatalos CUID GitHub Tároló
- CUID2 Specifikáció
- Elliott, Eric. "Egyedi ID-k generálása elosztott környezetben." Medium, 2015.
- "Ütközés-ellenálló ID-k elosztott rendszerekhez." DZone, 2018.
Ez a CUID generátor eszköz lehetővé teszi, hogy gyorsan generáljon CUID-okat a projektjeihez. Egyszerűen kattintson a "Generálás" gombra egy új CUID létrehozásához, és használja a "Másolás" gombot, hogy a vágólapra másolja, így könnyen használhatja az alkalmazásaiban.
Visszajelzés
Kattints a visszajelzés értesítésre, hogy elkezdhesd a visszajelzést erről az eszközről
Kapcsolódó Eszközök
Fedezd fel a további eszközöket, amelyek hasznosak lehetnek a munkafolyamatodhoz