Δημιουργήστε μοναδικούς αναγνωριστικούς αριθμούς (CUID) που είναι ανθεκτικοί σε συγκρούσεις για κατανεμημένα συστήματα, βάσεις δεδομένων και διαδικτυακές εφαρμογές. Αυτό το εργαλείο δημιουργεί CUID που είναι κλιμακωτά, ταξινομήσιμα και εξαιρετικά απίθανο να συγκρούονται.
Δημιουργήστε ένα ID ανθεκτικό σε συγκρούσεις γρήγορα και εύκολα.
Ένα CUID (Collision-resistant Unique IDentifier) είναι ένας μοναδικός αναγνωριστικός αριθμός σχεδιασμένος να είναι ανθεκτικός σε συγκρούσεις, οριζόντια κλιμακούμενος και διατεταγμένος κατά σειρά. Τα CUID είναι ιδιαίτερα χρήσιμα σε κατανεμημένα συστήματα όπου οι μοναδικοί αναγνωριστικοί αριθμοί χρειάζεται να παραχθούν χωρίς συντονισμό μεταξύ των κόμβων.
Ένα CUID συνήθως αποτελείται από τα εξής στοιχεία:
Η ακριβής δομή μπορεί να διαφέρει ανάλογα με την υλοποίηση του CUID, αλλά αυτά τα στοιχεία συνεργάζονται για να δημιουργήσουν έναν μοναδικό και διατεταγμένο αναγνωριστικό αριθμό.
Ακολουθεί μια οπτική αναπαράσταση μιας τυπικής δομής CUID:
Τα CUID παράγονται χρησιμοποιώντας έναν συνδυασμό χρονικών και τυχαίων στοιχείων. Η διαδικασία συνήθως περιλαμβάνει:
Το προκύπτον CUID συνήθως αναπαρίσταται ως μια συμβολοσειρά γραμμάτων και αριθμών.
Τα CUID προσφέρουν αρκετά πλεονεκτήματα σε σχέση με άλλα συστήματα μοναδικών αναγνωριστικών:
Κοινές χρήσεις για τα CUID περιλαμβάνουν:
Ακολουθούν παραδείγματα δημιουργίας 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 αντικατοπτρίζει τις μεταβαλλόμενες ανάγκες των κατανεμημένων συστημάτων και τις συνεχιζόμενες προσπάθειες να ισορροπήσουν την απλότητα, την ασφάλεια και την απόδοση στην παραγωγή μοναδικών αναγνωριστικών.
Αυτό το εργαλείο γεννήτριας CUID σας επιτρέπει να δημιουργείτε γρήγορα CUID για τα έργα σας. Απλά κάντε κλικ στο κουμπί "Γεννήστε" για να δημιουργήσετε ένα νέο CUID και χρησιμοποιήστε το κουμπί "Αντιγραφή" για να το αντιγράψετε στο πρόχειρο σας για εύκολη χρήση στις εφαρμογές σας.
Ανακαλύψτε περισσότερα εργαλεία που μπορεί να είναι χρήσιμα για τη ροή εργασίας σας