CUID Generator for Scalable and Collision-Resistant IDs
Hasilkan pengecam unik yang tahan perlanggaran (CUID) untuk sistem teragih, pangkalan data, dan aplikasi web. Alat ini mencipta CUID yang boleh diskala, boleh disusun, dan sangat tidak mungkin untuk bertembung.
Penjana CUID
Hasilkan ID yang tahan perlanggaran dengan cepat dan mudah.
Struktur CUID
Cap Waktu:
Rawak:
Dokumentasi
Penjana CUID
Pengenalan
CUID (Collision-resistant Unique IDentifier) adalah pengenal unik yang direka untuk tahan terhadap perlanggaran, boleh skala secara mendatar, dan boleh disusun secara berurutan. CUID sangat berguna dalam sistem teragih di mana pengenal unik perlu dijana tanpa koordinasi antara nod.
Struktur CUID
CUID biasanya terdiri daripada komponen berikut:
- Cap waktu: Representasi waktu semasa
- Penghitung: Penghitung berurutan untuk memastikan keunikan dalam milisaat yang sama
- Jejak klien: Pengenal unik bagi mesin atau proses yang menjana CUID
- Komponen rawak: Data rawak tambahan untuk mengurangkan kemungkinan perlanggaran
Struktur tepat mungkin berbeza bergantung pada pelaksanaan CUID, tetapi komponen ini bekerjasama untuk mencipta pengenal yang unik dan boleh disusun.
Berikut adalah representasi visual struktur CUID yang tipikal:
Cara CUID Dijana
CUID dijana menggunakan gabungan komponen berasaskan waktu dan rawak. Proses biasanya melibatkan:
- Mendapatkan cap waktu semasa
- Meningkatkan penghitung (yang akan menetap secara berkala)
- Menghasilkan jejak klien (biasanya dilakukan sekali setiap sesi atau permulaan aplikasi)
- Menambah data rawak
- Menggabungkan elemen-elemen ini dalam format tertentu
CUID yang dihasilkan biasanya diwakili sebagai rentetan huruf dan nombor.
Kelebihan dan Kes Penggunaan
CUID menawarkan beberapa kelebihan berbanding sistem pengenal unik lain:
- Tahan terhadap perlanggaran: Gabungan cap waktu, penghitung, dan data rawak menjadikan perlanggaran sangat tidak mungkin, bahkan dalam sistem teragih.
- Kebolehan skala secara mendatar: CUID boleh dijana secara bebas di banyak mesin tanpa koordinasi.
- Penyusunan berurutan: Komponen cap waktu membolehkan penyusunan kronologi CUID.
- Mesra URL: CUID biasanya terdiri daripada watak yang selamat untuk URL.
Kes penggunaan biasa untuk CUID termasuk:
- Kunci utama pangkalan data
- Sistem teragih di mana ID unik perlu dijana merentasi pelbagai nod
- ID sesi dalam aplikasi web
- Menjejak acara dalam sistem analitik
- Penamaan fail atau sumber dalam sistem penyimpanan awan
Contoh Kod
Berikut adalah contoh menjana CUID dalam pelbagai bahasa pengaturcaraan:
1// JavaScript (menggunakan pustaka 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (menggunakan pustaka 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (menggunakan gem 'cuid')
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (menggunakan pustaka '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# (menggunakan pakej 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 (menggunakan pakej 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (menggunakan pakej '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 (menggunakan pakej 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (menggunakan pelaksanaan khusus)
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 (menggunakan pelaksanaan khusus)
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% Penggunaan
12id = generateCUID();
13disp(id);
14
1## R (menggunakan pelaksanaan khusus)
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## Penggunaan
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (menggunakan pelaksanaan khusus)
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' Penggunaan dalam sel
17'=GenerateCUID()
18
Sejarah dan Pembangunan
CUID pada asalnya dibangunkan oleh Eric Elliott pada tahun 2012 sebagai penyelesaian kepada masalah menjana pengenal unik dalam sistem teragih. Konsep ini diilhamkan oleh sistem ID Snowflake Twitter tetapi direka untuk lebih mudah dilaksanakan dan digunakan merentasi pelbagai platform.
Pembangunan CUID didorong oleh keperluan untuk sistem ID yang mudah, tahan terhadap perlanggaran yang boleh berfungsi merentasi pelbagai bahasa pengaturcaraan dan persekitaran. Matlamat Elliott adalah untuk mencipta sistem yang mudah dilaksanakan, tidak memerlukan koordinasi pusat, dan boleh skala secara mendatar.
Sejak penubuhannya, CUID telah melalui beberapa iterasi dan penambahbaikan:
- Pelaksanaan CUID asal memberi tumpuan kepada kesederhanaan dan kemudahan penggunaan.
- Apabila penggunaan meningkat, komuniti menyumbang pelaksanaan dalam pelbagai bahasa pengaturcaraan.
- Pada tahun 2021, CUID2 diperkenalkan untuk menangani beberapa had CUID asal dan memberikan prestasi dan ketahanan perlanggaran yang lebih baik.
- CUID2 memperbaiki CUID asal dengan menggunakan penjana nombor rawak yang lebih selamat dan meningkatkan panjang keseluruhan pengenal.
Evolusi CUID mencerminkan keperluan yang berubah dalam sistem teragih dan usaha berterusan untuk menyeimbangkan kesederhanaan, keselamatan, dan prestasi dalam penjanaan pengenal unik.
Rujukan
- Repositori GitHub CUID Rasmi
- Spesifikasi CUID2
- Elliott, Eric. "Menghasilkan ID Unik dalam Persekitaran Teragih." Medium, 2015.
- "ID yang tahan terhadap perlanggaran untuk Sistem Teragih." DZone, 2018.
Alat penjana CUID ini membolehkan anda dengan cepat menjana CUID untuk projek anda. Hanya klik butang "Jana" untuk mencipta CUID baru, dan gunakan butang "Salin" untuk menyalinnya ke papan klip anda untuk penggunaan yang mudah dalam aplikasi anda.
Maklum balas
Klik toast maklum balas untuk mula memberi maklum balas tentang alat ini
Alat Berkaitan
Temui lebih banyak alat yang mungkin berguna untuk aliran kerja anda