גנרטור מזהים ייחודיים חסיני התנגשות (CUID) למערכות
צור מזהים ייחודיים חסיני התנגשות (CUIDs) עבור מערכות מבוזרות, מסדי נתונים ואפליקציות אינטרנט. כלי זה יוצר CUIDs שהם ניתנים להרחבה, ניתנים למיון, וסביר מאוד שלא יתנגשו.
גנרטור CUID
צור מזהה עמיד להתנגשויות במהירות ובקלות.
מבנה CUID
חותמת זמן:
אקראי:
תיעוד
מחולל CUID
מבוא
CUID (מזהה ייחודי עמיד בפני התנגשויות) הוא מזהה ייחודי שנועד להיות עמיד בפני התנגשויות, ניתנים להרחבה אופקית, וניתן למיון בסדר כרונולוגי. CUIDs שימושיים במיוחד במערכות מבוזרות שבהן יש צורך לייצר מזהים ייחודיים ללא תיאום בין צמתים.
מבנה ה-CUIDs
CUID בדרך כלל מורכב מהמרכיבים הבאים:
- חותמת זמן: ייצוג של הזמן הנוכחי
- מונה: מונה סדרתי כדי להבטיח ייחודיות בתוך אותו אלפית שנייה
- טביעת אצבע של לקוח: מזהה ייחודי עבור המחשב או התהליך המייצר את ה-CUID
- רכיב אקראי: נתונים אקראיים נוספים כדי להפחית עוד יותר את הסיכוי להתנגשויות
המבנה המדויק עשוי להשתנות בהתאם ליישום ה-CUID, אך המרכיבים הללו פועלים יחד כדי ליצור מזהה ייחודי וניתן למיון.
הנה ייצוג חזותי של מבנה CUID טיפוסי:
איך CUIDs נוצרים
CUIDs נוצרים באמצעות שילוב של רכיבים מבוססי זמן ורכיבים אקראיים. התהליך בדרך כלל כולל:
- קבלת חותמת הזמן הנוכחית
- הגדלת מונה (שמתאפס באופן תקופתי)
- יצירת טביעת אצבע של לקוח (בדרך כלל נעשית פעם אחת לכל סשן או הפעלת אפליקציה)
- הוספת נתונים אקראיים
- שילוב של רכיבים אלה בפורמט ספציפי
ה-CUID המתקבל מיוצג בדרך כלל כמחרוזת של אותיות ומספרים.
יתרונות ושימושים
CUIDs מציעים מספר יתרונות על פני מערכות מזהים ייחודיים אחרות:
- עמידות בפני התנגשויות: השילוב של חותמת זמן, מונה ונתונים אקראיים הופך התנגשויות לבלתי סבירות מאוד, אפילו במערכות מבוזרות.
- הרחבה אופקית: CUIDs יכולים להיווצר באופן עצמאי על מספר מכונות ללא תיאום.
- מיון כרונולוגי: רכיב חותמת הזמן מאפשר מיון כרונולוגי של CUIDs.
- ידידותיים ל-URL: CUIDs בדרך כלל מורכבים מתווים בטוחים ל-URL.
שימושים נפוצים עבור CUIDs כוללים:
- מפתחות ראשיים במסדי נתונים
- מערכות מבוזרות שבהן יש צורך לייצר מזהים ייחודיים על פני מספר צמתים
- מזהי סשן באפליקציות אינטרנט
- מעקב אחרי אירועים במערכות ניתוח
- שמות קבצים או משאבים במערכות אחסון בענן
דוגמאות קוד
הנה דוגמאות ליצירת CUIDs בשפות תכנות שונות:
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')
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
היסטוריה ופיתוח
CUIDs פותחו לראשונה על ידי אריק אליוט בשנת 2012 כפתרון לבעיה של יצירת מזהים ייחודיים במערכות מבוזרות. הרעיון הושפע ממערכת מזהי ה-Snowflake של טוויטר אך תוכנן להיות קל יותר ליישום ולשימוש על פני פלטפורמות שונות.
הפיתוח של CUIDs הונע על ידי הצורך במערכת מזהים פשוטה, עמידה בפני התנגשויות, שיכולה לעבוד על פני שפות תכנות וסביבות שונות. המטרה של אליוט הייתה ליצור מערכת שקל ליישם, שאינה דורשת תיאום מרכזי, ויכולה להתרחב אופקית.
מאז הקמתה, CUID עברה מספר חידושים ושיפורים:
- יישום ה-CUID המקורי התמקד בפשטות ובקלות השימוש.
- ככל שהשימוש הלך וגדל, הקהילה תרמה יישומים בשפות תכנות שונות.
- בשנת 2021, CUID2 הוצג כדי לטפל בכמה מגבלות של ה-CUID המקורי ולספק ביצועים טובים יותר ועמידות גבוהה יותר בפני התנגשויות.
- CUID2 שיפרה את המקורי על ידי שימוש בגנרטור מספרים אקראיים מאובטח יותר והגדלת האורך הכולל של המזהה.
ההתפתחות של CUIDs משקפת את הצרכים המשתנים של מערכות מבוזרות ואת המאמצים המתמשכים לשמור על איזון בין פשטות, אבטחה וביצועים ביצירת מזהים ייחודיים.
הפניות
- מאגר ה-GitHub הרשמי של CUID
- מפרט CUID2
- אליוט, אריק. "יצירת מזהים ייחודיים בסביבה מבוזרת." Medium, 2015.
- "מזהים עמידים בפני התנגשויות עבור מערכות מבוזרות." DZone, 2018.
כלי מחולל ה-CUID הזה מאפשר לך לייצר במהירות CUIDs עבור הפרויקטים שלך. פשוט לחץ על כפתור "צור" כדי ליצור CUID חדש, והשתמש בכפתור "העתק" כדי להעתיק אותו ללוח שלך לשימוש קל באפליקציות שלך.
משוב
לחץ על הקלטת משוב כדי להתחיל לתת משוב על כלי זה
כלים קשורים
גלה עוד כלים שעשויים להיות שימושיים עבור זרימת העבודה שלך