CUID Generator: Skalerbare og Sorterbare Identifikatorer
Generer kollisionsresistente unikke identifikatorer (CUID'er) til distribuerede systemer, databaser og webapplikationer. Dette værktøj opretter CUID'er, der er skalerbare, sorterbare og meget usandsynlige at kollidere.
CUID Generator
Generer en kollision-resistent ID hurtigt og nemt.
CUID Struktur
Tidsstempel:
Tilfældig:
Dokumentation
CUID Generator
Introduktion
En CUID (Collision-resistant Unique IDentifier) er en unik identifikator designet til at være kollisionsresistent, horisontalt skalerbar og sekventielt sorterbar. CUID'er er særligt nyttige i distribuerede systemer, hvor unikke identifikatorer skal genereres uden koordinering mellem noder.
Struktur af CUID'er
En CUID består typisk af følgende komponenter:
- Tidsstempel: En repræsentation af den nuværende tid
- Tæller: En sekventiel tæller for at sikre unikhed inden for den samme millisekund
- Klientfingeraftryk: En unik identifikator for den maskine eller proces, der genererer CUID'en
- Tilfældig komponent: Yderligere tilfældige data for yderligere at reducere kollisionssandsynligheden
Den præcise struktur kan variere afhængigt af CUID-implementeringen, men disse komponenter arbejder sammen for at skabe en unik og sorterbar identifikator.
Her er en visuel repræsentation af en typisk CUID-struktur:
Hvordan CUID'er genereres
CUID'er genereres ved hjælp af en kombination af tidsbaserede og tilfældige komponenter. Processen involverer typisk:
- At få det nuværende tidsstempel
- At inkrementere en tæller (som nulstilles periodisk)
- At generere et klientfingeraftryk (normalt gjort én gang pr. session eller applikationsstart)
- At tilføje tilfældige data
- At kombinere disse elementer i et specifikt format
Den resulterende CUID repræsenteres typisk som en streng af bogstaver og tal.
Fordele og anvendelsesområder
CUID'er tilbyder flere fordele i forhold til andre systemer til unikke identifikatorer:
- Kollisionsresistens: Kombinationen af tidsstempel, tæller og tilfældige data gør kollisionssandsynligheden ekstremt lav, selv i distribuerede systemer.
- Horisontal skalerbarhed: CUID'er kan genereres uafhængigt på flere maskiner uden koordinering.
- Sekventiel sortering: Tidsstempelkomponenten muliggør kronologisk sortering af CUID'er.
- URL-venlig: CUID'er består typisk af URL-sikre tegn.
Almindelige anvendelsesområder for CUID'er inkluderer:
- Primære nøgler i databaser
- Distribuerede systemer, hvor unikke ID'er skal genereres på tværs af flere noder
- Session ID'er i webapplikationer
- Sporingsbegivenheder i analysetjenester
- Fil- eller ressource-navngivning i cloud-lagringssystemer
Kodeeksempler
Her er eksempler på generering af CUID'er i forskellige programmeringssprog:
1// JavaScript (ved hjælp af 'cuid' biblioteket)
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (ved hjælp af 'cuid' biblioteket)
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (ved hjælp af 'cuid' gem)
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (ved hjælp af 'com.github.f4b6a3.cuid' biblioteket)
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# (ved hjælp af 'Cuid.Net' NuGet-pakken)
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 (ved hjælp af 'endyjasmi/cuid' pakken)
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (ved hjælp af 'github.com/lucsky/cuid' pakken)
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 (ved hjælp af 'CUID' pakken)
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (ved hjælp af en brugerdefineret implementering)
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 (ved hjælp af en brugerdefineret implementering)
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% Brug
12id = generateCUID();
13disp(id);
14
1## R (ved hjælp af en brugerdefineret implementering)
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## Brug
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (ved hjælp af en brugerdefineret implementering)
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' Brug i en celle
17'=GenerateCUID()
18
Historie og udvikling
CUID'er blev oprindeligt udviklet af Eric Elliott i 2012 som en løsning på problemet med at generere unikke identifikatorer i distribuerede systemer. Konceptet blev inspireret af Twitters Snowflake ID-system, men designet til at være lettere at implementere og bruge på tværs af forskellige platforme.
Udviklingen af CUID'er blev drevet af behovet for et simpelt, kollisionsresistent ID-system, der kunne fungere på tværs af forskellige programmeringssprog og miljøer. Elliotts mål var at skabe et system, der var nemt at implementere, ikke krævede central koordinering og kunne skaleres horisontalt.
Siden sin opstart er CUID gået gennem flere iterationer og forbedringer:
- Den oprindelige CUID-implementering fokuserede på enkelhed og brugervenlighed.
- Efterhånden som adoptionen voksede, bidrog fællesskabet med implementeringer i forskellige programmeringssprog.
- I 2021 blev CUID2 introduceret for at adressere nogle af begrænsningerne ved den oprindelige CUID og give endnu bedre ydeevne og kollisionsresistens.
- CUID2 forbedrede den oprindelige ved at bruge en mere sikker tilfældig talgenerator og øge den samlede længde af identifikatoren.
Udviklingen af CUID'er afspejler de skiftende behov i distribuerede systemer og de løbende bestræbelser på at balancere enkelhed, sikkerhed og ydeevne i genereringen af unikke identifikatorer.
Referencer
- Officiel CUID GitHub Repository
- CUID2-specifikation
- Elliott, Eric. "Generering af unikke ID'er i et distribueret miljø." Medium, 2015.
- "Kollisionsresistente ID'er til distribuerede systemer." DZone, 2018.
Dette CUID-generatorværktøj giver dig mulighed for hurtigt at generere CUID'er til dine projekter. Klik blot på "Generer"-knappen for at oprette en ny CUID, og brug "Kopier"-knappen for at kopiere den til din udklipsholder for nem brug i dine applikationer.
Feedback
Klik på feedback toasten for at begynde at give feedback om dette værktøj
Relaterede værktøjer
Opdag flere værktøjer, der kan være nyttige for dit workflow