Whiz Tools

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ű:

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:

  1. Időbélyeg: A jelenlegi idő reprezentációja
  2. Számláló: Egy sorozatos számláló, amely biztosítja az egyediséget ugyanabban a milliszekundumban
  3. Ügyfélujjlenyomat: Egyedi azonosító a gép vagy folyamat számára, amely a CUID-ot generálja
  4. 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:

Időbélyeg Számláló Ujjlenyomat Véletlenszerű

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:

  1. A jelenlegi időbélyeg lekérése
  2. Egy számláló növelése (amely időszakosan visszaáll)
  3. Ügyfélujjlenyomat generálása (általában egyszer a munkamenet vagy alkalmazás indításakor)
  4. Véletlenszerű adatok hozzáadása
  5. 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:

  1. Ü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.
  2. 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.
  3. Sorrend szerinti rendezés: Az időbélyeg összetevő lehetővé teszi a CUID-ok kronológiai rendezését.
  4. 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:

// JavaScript (a 'cuid' könyvtár használatával)
const cuid = require('cuid');
const id = cuid();
console.log(id);
## Python (a 'cuid' könyvtár használatával)
import cuid
id = cuid.cuid()
print(id)
## Ruby (a 'cuid' gem használatával)
require 'cuid'
id = Cuid::generate
puts id
// Java (a 'com.github.f4b6a3.cuid' könyvtár használatával)
import com.github.f4b6a3.cuid.Cuid;

public class CuidExample {
    public static void main(String[] args) {
        String id = Cuid.createCuid();
        System.out.println(id);
    }
}
// C# (a 'Cuid.Net' NuGet csomag használatával)
using Cuid;

class Program
{
    static void Main(string[] args)
    {
        string id = CuidGenerator.Generate();
        Console.WriteLine(id);
    }
}
// PHP (a 'endyjasmi/cuid' csomag használatával)
<?php
require 'vendor/autoload.php';
use Endyjasmi\Cuid\Cuid;

$id = Cuid::make();
echo $id;
// Go (a 'github.com/lucsky/cuid' csomag használatával)
package main

import (
    "fmt"
    "github.com/lucsky/cuid"
)

func main() {
    id := cuid.New()
    fmt.Println(id)
}
// Swift (a 'CUID' csomag használatával)
import CUID

let id = CUID()
print(id)
// C++ (egy egyedi implementáció használatával)
#include <iostream>
#include <chrono>
#include <random>
#include <sstream>
#include <iomanip>

std::string generateCUID() {
    auto now = std::chrono::system_clock::now();
    auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
    auto value = now_ms.time_since_epoch();
    long duration = value.count();

    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(0, 35);

    std::stringstream ss;
    ss << 'c';
    ss << std::hex << std::setfill('0') << std::setw(8) << duration;
    for (int i = 0; i < 8; i++) {
        int r = dis(gen);
        ss << (char)(r < 10 ? '0' + r : 'a' + r - 10);
    }
    return ss.str();
}

int main() {
    std::string id = generateCUID();
    std::cout << id << std::endl;
    return 0;
}
% MATLAB (egy egyedi implementáció használatával)
function id = generateCUID()
    timestamp = dec2hex(round(posixtime(datetime('now'))*1000), 8);
    random = '';
    for i = 1:8
        random = [random char(randi([48 57 97 122]))];
    end
    id = ['c' timestamp random];
end

% Használat
id = generateCUID();
disp(id);
## R (egy egyedi implementáció használatával)
library(lubridate)

generate_cuid <- function() {
  timestamp <- format(as.numeric(now()) * 1000, scientific = FALSE)
  timestamp <- substr(timestamp, 1, 8)
  random <- paste0(sample(c(0:9, letters[1:6]), 8, replace = TRUE), collapse = "")
  paste0("c", timestamp, random)
}

## Használat
id <- generate_cuid()
print(id)
' Excel VBA (egy egyedi implementáció használatával)
Function GenerateCUID() As String
    Dim timestamp As String
    Dim random As String
    Dim i As Integer
    
    timestamp = Right("00000000" & Hex(CLng(CDbl(Now()) * 86400000)), 8)
    
    For i = 1 To 8
        random = random & Mid("0123456789abcdef", Int(Rnd() * 16) + 1, 1)
    Next i
    
    GenerateCUID = "c" & timestamp & random
End Function

' Használat egy cellában
'=GenerateCUID()

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:

  1. Az eredeti CUID implementáció a egyszerűségre és a használhatóságra összpontosított.
  2. 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.
  3. 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.
  4. 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

  1. Hivatalos CUID GitHub Tároló
  2. CUID2 Specifikáció
  3. Elliott, Eric. "Egyedi ID-k generálása elosztott környezetben." Medium, 2015.
  4. "Ü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.

Feedback