เครื่องมือสร้าง CUID ที่ไม่ซ้ำและสามารถขยายได้
สร้างตัวระบุที่ไม่ชนกันและไม่ซ้ำ (CUID) สำหรับระบบกระจาย, ฐานข้อมูล, และแอปพลิเคชันเว็บ เครื่องมือนี้สร้าง CUID ที่สามารถขยายได้, เรียงลำดับได้, และมีความเป็นไปได้ที่จะไม่ชนกันต่ำมาก
ตัวสร้าง CUID
สร้าง ID ที่ทนต่อการชนกันได้อย่างรวดเร็วและง่ายดาย
โครงสร้าง CUID
เวลาประทับ:
สุ่ม:
เอกสารประกอบการใช้งาน
CUID Generator
บทนำ
CUID (Collision-resistant Unique IDentifier) เป็นตัวระบุที่ไม่ซ้ำกันซึ่งออกแบบมาให้ทนต่อการชนกัน, ขยายตัวในแนวนอน, และสามารถเรียงลำดับตามลำดับเวลาได้ CUIDs มีประโยชน์โดยเฉพาะในระบบที่กระจายซึ่งจำเป็นต้องสร้างตัวระบุที่ไม่ซ้ำกันโดยไม่ต้องประสานงานระหว่างโหนด
โครงสร้างของ CUIDs
CUID โดยทั่วไปประกอบด้วยส่วนประกอบต่อไปนี้:
- Timestamp: การแทนค่าของเวลาปัจจุบัน
- Counter: ตัวนับที่เรียงลำดับเพื่อให้แน่ใจว่ามีความไม่ซ้ำกันภายในมิลลิวินาทีเดียวกัน
- Client fingerprint: ตัวระบุที่ไม่ซ้ำกันสำหรับเครื่องหรือกระบวนการที่สร้าง CUID
- Random component: ข้อมูลสุ่มเพิ่มเติมเพื่อลดความน่าจะเป็นของการชนกัน
โครงสร้างที่แน่นอนอาจแตกต่างกันไปขึ้นอยู่กับการใช้งาน CUID แต่ส่วนประกอบเหล่านี้ทำงานร่วมกันเพื่อสร้างตัวระบุที่ไม่ซ้ำกันและสามารถเรียงลำดับได้
นี่คือการแสดงภาพของโครงสร้าง CUID ที่เป็นที่นิยม:
วิธีการสร้าง CUIDs
CUIDs ถูกสร้างขึ้นโดยใช้การรวมกันของส่วนประกอบที่อิงตามเวลาและสุ่ม กระบวนการปกติประกอบด้วย:
- รับค่าของ timestamp ปัจจุบัน
- เพิ่มค่าตัวนับ (ซึ่งจะรีเซ็ตเป็นระยะ ๆ)
- สร้าง client fingerprint (มักทำเพียงครั้งเดียวต่อเซสชันหรือการเริ่มต้นแอปพลิเคชัน)
- เพิ่มข้อมูลสุ่ม
- รวมส่วนประกอบเหล่านี้ในรูปแบบที่เฉพาะเจาะจง
CUID ที่ได้มักจะแสดงเป็นสตริงของตัวอักษรและตัวเลข
ข้อดีและกรณีการใช้งาน
CUIDs มีข้อดีหลายประการเมื่อเปรียบเทียบกับระบบตัวระบุที่ไม่ซ้ำกันอื่น ๆ:
- การทนต่อการชนกัน: การรวมกันของ timestamp, counter, และข้อมูลสุ่มทำให้การชนกันมีความน่าจะเป็นต่ำมาก แม้ในระบบที่กระจาย
- การขยายตัวในแนวนอน: CUIDs สามารถสร้างได้อย่างอิสระบนหลายเครื่องโดยไม่ต้องประสานงาน
- การเรียงลำดับตามลำดับเวลา: ส่วนประกอบ timestamp ช่วยให้สามารถเรียงลำดับ CUIDs ตามเวลา
- เป็นมิตรกับ URL: CUIDs มักประกอบด้วยตัวอักษรที่ปลอดภัยสำหรับ URL
กรณีการใช้งานทั่วไปสำหรับ CUIDs ได้แก่:
- คีย์หลักในฐานข้อมูล
- ระบบที่กระจายซึ่งจำเป็นต้องสร้าง 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# (ใช้แพ็คเกจ 'Cuid.Net' NuGet)
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
ประวัติและการพัฒนา
CUIDs ถูกพัฒนาขึ้นโดย Eric Elliott ในปี 2012 เป็นวิธีแก้ปัญหาในการสร้างตัวระบุที่ไม่ซ้ำกันในระบบที่กระจาย แนวคิดนี้ได้รับแรงบันดาลใจจากระบบ ID ของ Twitter ที่ชื่อว่า Snowflake แต่ถูกออกแบบมาให้ใช้งานได้ง่ายขึ้นและสามารถใช้ได้ในหลายแพลตฟอร์ม
การพัฒนาของ CUIDs ถูกขับเคลื่อนโดยความต้องการระบบ ID ที่ไม่ซ้ำกันที่เรียบง่ายและทนต่อการชนกัน ซึ่งสามารถทำงานได้ในหลายภาษาโปรแกรมและสภาพแวดล้อม เป้าหมายของ Elliott คือการสร้างระบบที่ง่ายต่อการใช้งาน ไม่ต้องการการประสานงานกลาง และสามารถขยายตัวในแนวนอนได้
ตั้งแต่เริ่มต้น CUID ได้ผ่านการปรับปรุงและพัฒนาหลายครั้ง:
- การใช้งาน CUID ดั้งเดิมมุ่งเน้นที่ความเรียบง่ายและการใช้งานที่ง่าย
- เมื่อการใช้งานเพิ่มขึ้น ชุมชนได้มีส่วนร่วมในการพัฒนาการใช้งานในหลายภาษาโปรแกรม
- ในปี 2021 CUID2 ได้ถูกนำเสนอเพื่อตอบสนองข้อจำกัดบางประการของ CUID ดั้งเดิมและให้ประสิทธิภาพและความทนทานต่อการชนกันที่ดียิ่งขึ้น
- CUID2 ได้ปรับปรุง CUID ดั้งเดิมโดยใช้ตัวสร้างเลขสุ่มที่ปลอดภัยมากขึ้นและเพิ่มความยาวโดยรวมของตัวระบุ
การพัฒนาของ CUIDs สะท้อนถึงความต้องการที่เปลี่ยนแปลงของระบบที่กระจายและความพยายามอย่างต่อเนื่องในการสร้างสมดุลระหว่างความเรียบง่าย ความปลอดภัย และประสิทธิภาพในการสร้างตัวระบุที่ไม่ซ้ำกัน
อ้างอิง
- ที่เก็บ GitHub อย่างเป็นทางการของ CUID
- ข้อกำหนด CUID2
- Elliott, Eric. "การสร้าง ID ที่ไม่ซ้ำกันในสภาพแวดล้อมที่กระจาย." Medium, 2015.
- "ID ที่ทนต่อการชนกันสำหรับระบบที่กระจาย." DZone, 2018.
เครื่องมือสร้าง CUID นี้ช่วยให้คุณสามารถสร้าง CUIDs ได้อย่างรวดเร็วสำหรับโครงการของคุณ เพียงคลิกที่ปุ่ม "สร้าง" เพื่อสร้าง CUID ใหม่ และใช้ปุ่ม "คัดลอก" เพื่อคัดลอกไปยังคลิปบอร์ดของคุณเพื่อใช้งานในแอปพลิเคชันของคุณได้อย่างง่ายดาย
คำติชม
คลิกที่ feedback toast เพื่อเริ่มให้คำแนะนำเกี่ยวกับเครื่องมือนี้
เครื่องมือที่เกี่ยวข้อง
ค้นพบเครื่องมือเพิ่มเติมที่อาจจะมีประโยชน์สำหรับการทำงานของคุณ