Whiz Tools

CUID Generaator

Genereeri kokkupõrkevastane ID kiiresti ja lihtsalt.

CUID Struktuur

Ajast:

Juhuslik:

CUID Generaator

Sissejuhatus

CUID (kokkupõrkekindel unikaalne IDentifikaator) on unikaalne identifikaator, mis on loodud olema kokkupõrkekindel, horisontaalselt skaleeritav ja järjestikku sorteeritav. CUID-id on eriti kasulikud jaotatud süsteemides, kus unikaalseid identifikaatoreid tuleb genereerida ilma sõlmede vahelise koordineerimiseta.

CUID-de struktuur

CUID koosneb tavaliselt järgmistest komponentidest:

  1. Aja temp: Praeguse aja esitus
  2. Loendur: Järjestikune loendur, et tagada unikaalsus sama millisekundi jooksul
  3. Klientide sõrmejälg: Unikaalne identifikaator masina või protsessi jaoks, mis genereerib CUID
  4. Juhuslik komponent: Lisajuhuslikud andmed, et veelgi vähendada kokkupõrke tõenäosust

Täpsed struktuurid võivad varieeruda sõltuvalt CUID rakendamisest, kuid need komponendid töötavad koos, et luua unikaalne ja järjestatav identifikaator.

Siin on visuaalne esitus tüüpilise CUID struktuuri kohta:

Aja temp Loendur Sõrmejälg Juhuslik

Kuidas CUID-e genereeritakse

CUID-e genereeritakse ajapõhiste ja juhuslike komponentide kombinatsiooni abil. Protsess hõlmab tavaliselt:

  1. Praeguse aja temp saamine
  2. Loenduri suurendamine (mis lähtestatakse perioodiliselt)
  3. Klientide sõrmejälje genereerimine (tavaliselt tehakse seda kord sessiooni või rakenduse käivitamise ajal)
  4. Juhuslike andmete lisamine
  5. Nende elementide kombineerimine kindlas formaadis

Tulemuslik CUID esitatakse tavaliselt tähtede ja numbrite stringina.

Eelised ja kasutusjuhtumid

CUID-id pakuvad mitmeid eeliseid võrreldes teiste unikaalsete identifikaatorite süsteemidega:

  1. Kokkupõrkekindlus: Aja temp, loendur ja juhuslikud andmed muudavad kokkupõrked äärmiselt ebatõenäoliseks, isegi jaotatud süsteemides.
  2. Horisontaalne skaleeritavus: CUID-e saab genereerida iseseisvalt mitmel masinal ilma koordineerimiseta.
  3. Järjestikune sortimine: Aja temp komponent võimaldab CUID-de kronoloogilist sortimist.
  4. URL-sõbralik: CUID-id koosnevad tavaliselt URL-i ohututest märkidest.

CUID-de levinud kasutusjuhtumiteks on:

  • Andmebaasi põhi võtmed
  • Jaotatud süsteemid, kus unikaalsed ID-d tuleb genereerida mitme sõlme vahel
  • Sessiooni ID-d veebirakendustes
  • Ürituste jälgimine analüütika süsteemides
  • Failide või ressursside nimetamine pilvesalvestussüsteemides

Koodinäited

Siin on näited CUID-de genereerimisest erinevates programmeerimiskeeltes:

// JavaScript (kasutades 'cuid' teeki)
const cuid = require('cuid');
const id = cuid();
console.log(id);
## Python (kasutades 'cuid' teeki)
import cuid
id = cuid.cuid()
print(id)
## Ruby (kasutades 'cuid' gemmi)
require 'cuid'
id = Cuid::generate
puts id
// Java (kasutades 'com.github.f4b6a3.cuid' teeki)
import com.github.f4b6a3.cuid.Cuid;

public class CuidExample {
    public static void main(String[] args) {
        String id = Cuid.createCuid();
        System.out.println(id);
    }
}
// C# (kasutades 'Cuid.Net' NuGet paketti)
using Cuid;

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

$id = Cuid::make();
echo $id;
// Go (kasutades 'github.com/lucsky/cuid' paketti)
package main

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

func main() {
    id := cuid.New()
    fmt.Println(id)
}
// Swift (kasutades 'CUID' paketti)
import CUID

let id = CUID()
print(id)
// C++ (kasutades kohandatud rakendust)
#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 (kasutades kohandatud rakendust)
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

% Kasutamine
id = generateCUID();
disp(id);
## R (kasutades kohandatud rakendust)
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)
}

## Kasutamine
id <- generate_cuid()
print(id)
' Excel VBA (kasutades kohandatud rakendust)
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

' Kasutamine rakenduses
'=GenerateCUID()

Ajalugu ja areng

CUID-e arendati esmakordselt Eric Elliott'i poolt 2012. aastal lahenduseks unikaalsete identifikaatorite genereerimise probleemile jaotatud süsteemides. Kontseptsioon sai inspiratsiooni Twitteri Snowflake ID süsteemist, kuid oli loodud olema kergemini rakendatav ja kasutatav erinevates platvormides.

CUID-de arendamine oli tingitud vajadusest lihtsa, kokkupõrkekindla ID süsteemi järele, mis saaks töötada erinevates programmeerimiskeeltes ja keskkondades. Elliott'i eesmärk oli luua süsteem, mis oleks lihtne rakendada, ei nõuaks keskset koordineerimist ja suudaks horisontaalselt skaleeruda.

Alates oma loomisest on CUID läbinud mitmeid iteratsioone ja täiustusi:

  1. Algne CUID rakendus keskendus lihtsusele ja kasutusmugavusele.
  2. Kui kasutamine kasvas, andis kogukond oma panuse rakenduste loomisse erinevates programmeerimiskeeltes.
    1. aastal tutvustati CUID2, et lahendada algse CUID mõningaid piiranguid ja pakkuda veelgi paremat jõudlust ja kokkupõrkekindlust.
  3. CUID2 parandas algset, kasutades turvalisemat juhuslike numbrite generaatorit ja suurendades identifikaatori üldpikkust.

CUID-de areng peegeldab jaotatud süsteemide muutuvat vajadust ja pidevaid pingutusi tasakaalu leidmiseks lihtsuse, turvalisuse ja jõudluse vahel unikaalsete identifikaatorite genereerimisel.

Viidatud allikad

  1. Ametlik CUID GitHubi hoidla
  2. CUID2 spetsifikatsioon
  3. Elliott, Eric. "Unikaalsete ID-de genereerimine jaotatud keskkonnas." Medium, 2015.
  4. "Kokkupõrkekindlad ID-d jaotatud süsteemidele." DZone, 2018.

See CUID generaatori tööriist võimaldab teil kiiresti genereerida CUID-e oma projektide jaoks. Lihtsalt klõpsake "Genereeri" nuppu, et luua uus CUID, ja kasutage "Kopeeri" nuppu, et kopeerida see oma lõikelauale, et seda oma rakendustes hõlpsasti kasutada.

Feedback