Whiz Tools

גנרטור CUID

צור מזהה עמיד להתנגשויות במהירות ובקלות.

מבנה CUID

חותמת זמן:

אקראי:

מחולל CUID

מבוא

CUID (מזהה ייחודי עמיד בפני התנגשויות) הוא מזהה ייחודי שנועד להיות עמיד בפני התנגשויות, ניתנים להרחבה אופקית, וניתן למיון בסדר כרונולוגי. CUIDs שימושיים במיוחד במערכות מבוזרות שבהן יש צורך לייצר מזהים ייחודיים ללא תיאום בין צמתים.

מבנה ה-CUIDs

CUID בדרך כלל מורכב מהמרכיבים הבאים:

  1. חותמת זמן: ייצוג של הזמן הנוכחי
  2. מונה: מונה סדרתי כדי להבטיח ייחודיות בתוך אותו אלפית שנייה
  3. טביעת אצבע של לקוח: מזהה ייחודי עבור המחשב או התהליך המייצר את ה-CUID
  4. רכיב אקראי: נתונים אקראיים נוספים כדי להפחית עוד יותר את הסיכוי להתנגשויות

המבנה המדויק עשוי להשתנות בהתאם ליישום ה-CUID, אך המרכיבים הללו פועלים יחד כדי ליצור מזהה ייחודי וניתן למיון.

הנה ייצוג חזותי של מבנה CUID טיפוסי:

חותמת זמן מונה טביעת אצבע אקראי

איך CUIDs נוצרים

CUIDs נוצרים באמצעות שילוב של רכיבים מבוססי זמן ורכיבים אקראיים. התהליך בדרך כלל כולל:

  1. קבלת חותמת הזמן הנוכחית
  2. הגדלת מונה (שמתאפס באופן תקופתי)
  3. יצירת טביעת אצבע של לקוח (בדרך כלל נעשית פעם אחת לכל סשן או הפעלת אפליקציה)
  4. הוספת נתונים אקראיים
  5. שילוב של רכיבים אלה בפורמט ספציפי

ה-CUID המתקבל מיוצג בדרך כלל כמחרוזת של אותיות ומספרים.

יתרונות ושימושים

CUIDs מציעים מספר יתרונות על פני מערכות מזהים ייחודיים אחרות:

  1. עמידות בפני התנגשויות: השילוב של חותמת זמן, מונה ונתונים אקראיים הופך התנגשויות לבלתי סבירות מאוד, אפילו במערכות מבוזרות.
  2. הרחבה אופקית: CUIDs יכולים להיווצר באופן עצמאי על מספר מכונות ללא תיאום.
  3. מיון כרונולוגי: רכיב חותמת הזמן מאפשר מיון כרונולוגי של CUIDs.
  4. ידידותיים ל-URL: CUIDs בדרך כלל מורכבים מתווים בטוחים ל-URL.

שימושים נפוצים עבור CUIDs כוללים:

  • מפתחות ראשיים במסדי נתונים
  • מערכות מבוזרות שבהן יש צורך לייצר מזהים ייחודיים על פני מספר צמתים
  • מזהי סשן באפליקציות אינטרנט
  • מעקב אחרי אירועים במערכות ניתוח
  • שמות קבצים או משאבים במערכות אחסון בענן

דוגמאות קוד

הנה דוגמאות ליצירת CUIDs בשפות תכנות שונות:

// JavaScript (באמצעות ספריית 'cuid')
const cuid = require('cuid');
const id = cuid();
console.log(id);
## Python (באמצעות ספריית 'cuid')
import cuid
id = cuid.cuid()
print(id)
## Ruby (באמצעות הג'ם 'cuid')
require 'cuid'
id = Cuid::generate
puts id
// Java (באמצעות ספריית 'com.github.f4b6a3.cuid')
import com.github.f4b6a3.cuid.Cuid;

public class CuidExample {
    public static void main(String[] args) {
        String id = Cuid.createCuid();
        System.out.println(id);
    }
}
// C# (באמצעות חבילת NuGet 'Cuid.Net')
using Cuid;

class Program
{
    static void Main(string[] args)
    {
        string id = CuidGenerator.Generate();
        Console.WriteLine(id);
    }
}
// PHP (באמצעות חבילת 'endyjasmi/cuid')
<?php
require 'vendor/autoload.php';
use Endyjasmi\Cuid\Cuid;

$id = Cuid::make();
echo $id;
// Go (באמצעות חבילת 'github.com/lucsky/cuid')
package main

import (
    "fmt"
    "github.com/lucsky/cuid"
)

func main() {
    id := cuid.New()
    fmt.Println(id)
}
// Swift (באמצעות חבילת 'CUID')
import CUID

let id = CUID()
print(id)
// C++ (באמצעות יישום מותאם אישית)
#include <iostream>
#include <chrono>
#include <random>
#include <sstream>
#include <iomanip>

std::string generateCUID() {
    auto now = std::chrono::system_clock::now();
    auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
    auto value = now_ms.time_since_epoch();
    long duration = value.count();

    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(0, 35);

    std::stringstream ss;
    ss << 'c';
    ss << std::hex << std::setfill('0') << std::setw(8) << duration;
    for (int i = 0; i < 8; i++) {
        int r = dis(gen);
        ss << (char)(r < 10 ? '0' + r : 'a' + r - 10);
    }
    return ss.str();
}

int main() {
    std::string id = generateCUID();
    std::cout << id << std::endl;
    return 0;
}
% MATLAB (באמצעות יישום מותאם אישית)
function id = generateCUID()
    timestamp = dec2hex(round(posixtime(datetime('now'))*1000), 8);
    random = '';
    for i = 1:8
        random = [random char(randi([48 57 97 122]))];
    end
    id = ['c' timestamp random];
end

% שימוש
id = generateCUID();
disp(id);
## R (באמצעות יישום מותאם אישית)
library(lubridate)

generate_cuid <- function() {
  timestamp <- format(as.numeric(now()) * 1000, scientific = FALSE)
  timestamp <- substr(timestamp, 1, 8)
  random <- paste0(sample(c(0:9, letters[1:6]), 8, replace = TRUE), collapse = "")
  paste0("c", timestamp, random)
}

## שימוש
id <- generate_cuid()
print(id)
' Excel VBA (באמצעות יישום מותאם אישית)
Function GenerateCUID() As String
    Dim timestamp As String
    Dim random As String
    Dim i As Integer
    
    timestamp = Right("00000000" & Hex(CLng(CDbl(Now()) * 86400000)), 8)
    
    For i = 1 To 8
        random = random & Mid("0123456789abcdef", Int(Rnd() * 16) + 1, 1)
    Next i
    
    GenerateCUID = "c" & timestamp & random
End Function

' שימוש בתא
'=GenerateCUID()

היסטוריה ופיתוח

CUIDs פותחו לראשונה על ידי אריק אליוט בשנת 2012 כפתרון לבעיה של יצירת מזהים ייחודיים במערכות מבוזרות. הרעיון הושפע ממערכת מזהי ה-Snowflake של טוויטר אך תוכנן להיות קל יותר ליישום ולשימוש על פני פלטפורמות שונות.

הפיתוח של CUIDs הונע על ידי הצורך במערכת מזהים פשוטה, עמידה בפני התנגשויות, שיכולה לעבוד על פני שפות תכנות וסביבות שונות. המטרה של אליוט הייתה ליצור מערכת שקל ליישם, שאינה דורשת תיאום מרכזי, ויכולה להתרחב אופקית.

מאז הקמתה, CUID עברה מספר חידושים ושיפורים:

  1. יישום ה-CUID המקורי התמקד בפשטות ובקלות השימוש.
  2. ככל שהשימוש הלך וגדל, הקהילה תרמה יישומים בשפות תכנות שונות.
  3. בשנת 2021, CUID2 הוצג כדי לטפל בכמה מגבלות של ה-CUID המקורי ולספק ביצועים טובים יותר ועמידות גבוהה יותר בפני התנגשויות.
  4. CUID2 שיפרה את המקורי על ידי שימוש בגנרטור מספרים אקראיים מאובטח יותר והגדלת האורך הכולל של המזהה.

ההתפתחות של CUIDs משקפת את הצרכים המשתנים של מערכות מבוזרות ואת המאמצים המתמשכים לשמור על איזון בין פשטות, אבטחה וביצועים ביצירת מזהים ייחודיים.

הפניות

  1. מאגר ה-GitHub הרשמי של CUID
  2. מפרט CUID2
  3. אליוט, אריק. "יצירת מזהים ייחודיים בסביבה מבוזרת." Medium, 2015.
  4. "מזהים עמידים בפני התנגשויות עבור מערכות מבוזרות." DZone, 2018.

כלי מחולל ה-CUID הזה מאפשר לך לייצר במהירות CUIDs עבור הפרויקטים שלך. פשוט לחץ על כפתור "צור" כדי ליצור CUID חדש, והשתמש בכפתור "העתק" כדי להעתיק אותו ללוח שלך לשימוש קל באפליקציות שלך.

Feedback