CUID Generator for Unique Identifiers in Distributed Systems
Genereerige kokkupõrkeid vältivad unikaalsed tuvastajad (CUID-d) jaotatud süsteemide, andmebaaside ja veebirakenduste jaoks. See tööriist loob CUID-e, mis on skaleeritavad, sorteeritavad ja väga ebatõenäoliselt kokku kukkuvad.
CUID Generaator
Genereeri kokkupõrkevastane ID kiiresti ja lihtsalt.
CUID Struktuur
Ajast:
Juhuslik:
Dokumentatsioon
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:
- Aja temp: Praeguse aja esitus
- Loendur: Järjestikune loendur, et tagada unikaalsus sama millisekundi jooksul
- Klientide sõrmejälg: Unikaalne identifikaator masina või protsessi jaoks, mis genereerib CUID
- 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:
Kuidas CUID-e genereeritakse
CUID-e genereeritakse ajapõhiste ja juhuslike komponentide kombinatsiooni abil. Protsess hõlmab tavaliselt:
- Praeguse aja temp saamine
- Loenduri suurendamine (mis lähtestatakse perioodiliselt)
- Klientide sõrmejälje genereerimine (tavaliselt tehakse seda kord sessiooni või rakenduse käivitamise ajal)
- Juhuslike andmete lisamine
- 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:
- Kokkupõrkekindlus: Aja temp, loendur ja juhuslikud andmed muudavad kokkupõrked äärmiselt ebatõenäoliseks, isegi jaotatud süsteemides.
- Horisontaalne skaleeritavus: CUID-e saab genereerida iseseisvalt mitmel masinal ilma koordineerimiseta.
- Järjestikune sortimine: Aja temp komponent võimaldab CUID-de kronoloogilist sortimist.
- 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:
1// JavaScript (kasutades 'cuid' teeki)
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (kasutades 'cuid' teeki)
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (kasutades 'cuid' gemmi)
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (kasutades 'com.github.f4b6a3.cuid' teeki)
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# (kasutades 'Cuid.Net' NuGet paketti)
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 (kasutades 'endyjasmi/cuid' paketti)
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (kasutades 'github.com/lucsky/cuid' paketti)
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 (kasutades 'CUID' paketti)
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (kasutades kohandatud rakendust)
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 (kasutades kohandatud rakendust)
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% Kasutamine
12id = generateCUID();
13disp(id);
14
1## R (kasutades kohandatud rakendust)
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## Kasutamine
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (kasutades kohandatud rakendust)
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' Kasutamine rakenduses
17'=GenerateCUID()
18
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:
- Algne CUID rakendus keskendus lihtsusele ja kasutusmugavusele.
- Kui kasutamine kasvas, andis kogukond oma panuse rakenduste loomisse erinevates programmeerimiskeeltes.
-
- aastal tutvustati CUID2, et lahendada algse CUID mõningaid piiranguid ja pakkuda veelgi paremat jõudlust ja kokkupõrkekindlust.
- 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
- Ametlik CUID GitHubi hoidla
- CUID2 spetsifikatsioon
- Elliott, Eric. "Unikaalsete ID-de genereerimine jaotatud keskkonnas." Medium, 2015.
- "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.
Tagasiside
Kliki tagasiside teavitusele, et alustada tagasiside andmist selle tööriista kohta
Seotud tööriistad
Avasta rohkem tööriistu, mis võivad olla kasulikud sinu töövoo jaoks