Γεννήτρια CUID για μοναδικούς αναγνωριστικούς αριθμούς
Δημιουργήστε μοναδικούς αναγνωριστικούς αριθμούς (CUID) που είναι ανθεκτικοί σε συγκρούσεις για κατανεμημένα συστήματα, βάσεις δεδομένων και διαδικτυακές εφαρμογές. Αυτό το εργαλείο δημιουργεί CUID που είναι κλιμακωτά, ταξινομήσιμα και εξαιρετικά απίθανο να συγκρούονται.
Γεννήτρια CUID
Δημιουργήστε ένα ID ανθεκτικό σε συγκρούσεις γρήγορα και εύκολα.
Δομή CUID
Χρονική Σημείωση:
Τυχαίο:
Τεκμηρίωση
Γεννήτρια CUID
Εισαγωγή
Ένα CUID (Collision-resistant Unique IDentifier) είναι ένας μοναδικός αναγνωριστικός αριθμός σχεδιασμένος να είναι ανθεκτικός σε συγκρούσεις, οριζόντια κλιμακούμενος και διατεταγμένος κατά σειρά. Τα CUID είναι ιδιαίτερα χρήσιμα σε κατανεμημένα συστήματα όπου οι μοναδικοί αναγνωριστικοί αριθμοί χρειάζεται να παραχθούν χωρίς συντονισμό μεταξύ των κόμβων.
Δομή των CUID
Ένα CUID συνήθως αποτελείται από τα εξής στοιχεία:
- Χρονική σήμανση: Μια αναπαράσταση της τρέχουσας ώρας
- Μετρητής: Ένας διαδοχικός μετρητής για να διασφαλιστεί η μοναδικότητα εντός της ίδιας χιλιοστά του δευτερολέπτου
- Δακτυλικό αποτύπωμα πελάτη: Ένας μοναδικός αναγνωριστικός αριθμός για τη μηχανή ή τη διαδικασία που παράγει το CUID
- Τυχαίο στοιχείο: Πρόσθετα τυχαία δεδομένα για να μειωθεί περαιτέρω η πιθανότητα συγκρούσεων
Η ακριβής δομή μπορεί να διαφέρει ανάλογα με την υλοποίηση του CUID, αλλά αυτά τα στοιχεία συνεργάζονται για να δημιουργήσουν έναν μοναδικό και διατεταγμένο αναγνωριστικό αριθμό.
Ακολουθεί μια οπτική αναπαράσταση μιας τυπικής δομής CUID:
Πώς παράγονται τα CUID
Τα CUID παράγονται χρησιμοποιώντας έναν συνδυασμό χρονικών και τυχαίων στοιχείων. Η διαδικασία συνήθως περιλαμβάνει:
- Λήψη της τρέχουσας χρονικής σήμανσης
- Αυξάνοντας έναν μετρητή (ο οποίος επαναρυθμίζεται περιοδικά)
- Δημιουργία ενός δακτυλικού αποτυπώματος πελάτη (συνήθως γίνεται μία φορά ανά συνεδρία ή εκκίνηση εφαρμογής)
- Προσθήκη τυχαίων δεδομένων
- Συνδυασμός αυτών των στοιχείων σε μια συγκεκριμένη μορφή
Το προκύπτον CUID συνήθως αναπαρίσταται ως μια συμβολοσειρά γραμμάτων και αριθμών.
Πλεονεκτήματα και Χρήσεις
Τα CUID προσφέρουν αρκετά πλεονεκτήματα σε σχέση με άλλα συστήματα μοναδικών αναγνωριστικών:
- Ανθεκτικότητα σε συγκρούσεις: Ο συνδυασμός χρονικής σήμανσης, μετρητή και τυχαίων δεδομένων καθιστά τις συγκρούσεις εξαιρετικά απίθανες, ακόμη και σε κατανεμημένα συστήματα.
- Οριζόντια κλιμάκωση: Τα CUID μπορούν να παραχθούν ανεξάρτητα σε πολλές μηχανές χωρίς συντονισμό.
- Διατεταγμένη ταξινόμηση: Το στοιχείο χρονικής σήμανσης επιτρέπει την χρονολογική ταξινόμηση των CUID.
- Φιλικά προς το URL: Τα CUID συνήθως αποτελούνται από χαρακτήρες που είναι ασφαλείς για URL.
Κοινές χρήσεις για τα CUID περιλαμβάνουν:
- Πρωτεύοντα κλειδιά βάσης δεδομένων
- Κατανεμημένα συστήματα όπου χρειάζεται να παραχθούν μοναδικά ID σε πολλούς κόμβους
- ID συνεδριών σε διαδικτυακές εφαρμογές
- Παρακολούθηση γεγονότων σε συστήματα ανάλυσης
- Ονοματοδοσία αρχείων ή πόρων σε συστήματα αποθήκευσης στο σύννεφο
Παραδείγματα Κώδικα
Ακολουθούν παραδείγματα δημιουργίας CUID σε διάφορες γλώσσες προγραμματισμού:
1// JavaScript (χρησιμοποιώντας τη βιβλιοθήκη 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (χρησιμοποιώντας τη βιβλιοθήκη 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (χρησιμοποιώντας το 'cuid' gem)
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (χρησιμοποιώντας τη βιβλιοθήκη 'com.github.f4b6a3.cuid')
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# (χρησιμοποιώντας το πακέτο NuGet 'Cuid.Net')
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 (χρησιμοποιώντας το πακέτο 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (χρησιμοποιώντας το πακέτο 'github.com/lucsky/cuid')
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 (χρησιμοποιώντας το πακέτο 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (χρησιμοποιώντας μια προσαρμοσμένη υλοποίηση)
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 (χρησιμοποιώντας μια προσαρμοσμένη υλοποίηση)
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% Χρήση
12id = generateCUID();
13disp(id);
14
1## R (χρησιμοποιώντας μια προσαρμοσμένη υλοποίηση)
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## Χρήση
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (χρησιμοποιώντας μια προσαρμοσμένη υλοποίηση)
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' Χρήση σε ένα κελί
17'=GenerateCUID()
18
Ιστορία και Ανάπτυξη
Τα CUID αναπτύχθηκαν αρχικά από τον Eric Elliott το 2012 ως λύση στο πρόβλημα της παραγωγής μοναδικών αναγνωριστικών σε κατανεμημένα συστήματα. Η έννοια εμπνεύστηκε από το σύστημα αναγνωριστικών Snowflake του Twitter αλλά σχεδιάστηκε για να είναι πιο εύκολα υλοποιήσιμη και χρησιμοποιήσιμη σε διάφορες πλατφόρμες.
Η ανάπτυξη των CUID καθοδηγήθηκε από την ανάγκη για ένα απλό, ανθεκτικό σε συγκρούσεις σύστημα ID που θα μπορούσε να λειτουργήσει σε διάφορες γλώσσες προγραμματισμού και περιβάλλοντα. Ο στόχος του Elliott ήταν να δημιουργήσει ένα σύστημα που θα ήταν εύκολο στην υλοποίηση, δεν θα απαιτούσε κεντρικό συντονισμό και θα μπορούσε να κλιμακωθεί οριζόντια.
Από την ίδρυσή του, το CUID έχει περάσει από πολλές επαναλήψεις και βελτιώσεις:
- Η αρχική υλοποίηση του CUID επικεντρώθηκε στην απλότητα και τη χρηστικότητα.
- Καθώς η υιοθέτηση αυξήθηκε, η κοινότητα συνέβαλε με υλοποιήσεις σε διάφορες γλώσσες προγραμματισμού.
- Το 2021, εισήχθη το CUID2 για να αντιμετωπίσει ορισμένους περιορισμούς του αρχικού CUID και να προσφέρει ακόμη καλύτερη απόδοση και ανθεκτικότητα σε συγκρούσεις.
- Το CUID2 βελτίωσε την αρχική έκδοση χρησιμοποιώντας έναν πιο ασφαλή τυχαίο αριθμό και αυξάνοντας το συνολικό μήκος του αναγνωριστικού.
Η εξέλιξη των CUID αντικατοπτρίζει τις μεταβαλλόμενες ανάγκες των κατανεμημένων συστημάτων και τις συνεχιζόμενες προσπάθειες να ισορροπήσουν την απλότητα, την ασφάλεια και την απόδοση στην παραγωγή μοναδικών αναγνωριστικών.
Αναφορές
- Επίσημο αποθετήριο CUID στο GitHub
- Προδιαγραφή CUID2
- Elliott, Eric. "Generating Unique IDs in a Distributed Environment." Medium, 2015.
- "Collision-resistant IDs for Distributed Systems." DZone, 2018.
Αυτό το εργαλείο γεννήτριας CUID σας επιτρέπει να δημιουργείτε γρήγορα CUID για τα έργα σας. Απλά κάντε κλικ στο κουμπί "Γεννήστε" για να δημιουργήσετε ένα νέο CUID και χρησιμοποιήστε το κουμπί "Αντιγραφή" για να το αντιγράψετε στο πρόχειρο σας για εύκολη χρήση στις εφαρμογές σας.
Ανατροφοδότηση
Κάντε κλικ στο toast ανατροφοδότησης για να ξεκινήσετε να δίνετε ανατροφοδότηση για αυτό το εργαλείο
Σχετικά Εργαλεία
Ανακαλύψτε περισσότερα εργαλεία που μπορεί να είναι χρήσιμα για τη ροή εργασίας σας