Whiz Tools

גנרטור UUID

UUID שנוצר

מבנה UUID
זמן נמוך

UUID גנרטור

הקדמה

מזהה ייחודי אוניברסלי (UUID) הוא מספר בן 128 סיביות המשמש לזיהוי מידע במערכות מחשב. UUIDs הוסדרו על ידי קרן התוכנה הפתוחה (OSF) כחלק מהסביבה של מחשוב מבוזר (DCE). מזהים אלו נועדו להיות ייחודיים גם במרחב וגם בזמן, מה שהופך אותם לאידיאליים עבור יישומים שונים במערכות מבוזרות ומעבר לכך.

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

איך UUIDs פועלים

מבנה UUID

UUID בדרך כלל מיוצג כ-32 ספרות הקסדצימליות, מוצגות בחמישה קבוצות מופרדות במקפים, בצורה 8-4-4-4-12, בסך הכל 36 תווים (32 תווים אלפאנומריים ו-4 מקפים). לדוגמה:

550e8400-e29b-41d4-a716-446655440000

ה-128 סיביות של UUID מחולקות לשדות ספציפיים, כל אחד נושא מידע שונה בהתאם לגרסת ה-UUID:

  • 32 סיביות עבור שדה time_low
  • 16 סיביות עבור שדה time_mid
  • 16 סיביות עבור שדה time_hi_and_version
  • 8 סיביות עבור שדה clock_seq_hi_and_reserved
  • 8 סיביות עבור שדה clock_seq_low
  • 48 סיביות עבור שדה node

הנה דיאגרמה הממחישה את מבנה ה-UUID:

A B C D E F A: time_low (32 סיביות) B: time_mid (16 סיביות) C: time_hi_and_version (16 סיביות) D: clock_seq_hi_and_reserved (8 סיביות) E: clock_seq_low (8 סיביות) F: node (48 סיביות)

גרסאות UUID

ישנן מספר גרסאות של UUIDs, כל אחת עם שיטת הגנרציה שלה:

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

כלי זה מתמקד בהפקת UUIDs גרסה 1 וגרסה 4.

נוסחה

גנרציה של UUID גרסה 1

UUIDs גרסה 1 נוצרות באמצעות הרכיבים הבאים:

  1. חותמת זמן: ערך בן 60 סיביות המייצג את מספר האינטרוולים של 100 ננו-שניות מאז ה-15 באוקטובר 1582 (תאריך הרפורמה הגרגוריאנית בלוח השנה הנוצרי).
  2. רצף שעון: ערך בן 14 סיביות המשמש להימנע מדובלים במקרה שהשעון מוגדר לאחור.
  3. Node: ערך בן 48 סיביות, בדרך כלל נגזר מכתובת ה-MAC של המחשב.

הנוסחה להפקת UUID גרסה 1 יכולה להיות מבוטאת כך:

UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node

גנרציה של UUID גרסה 4

UUIDs גרסה 4 נוצרות באמצעות מחולל מספרים אקראיים חזק מבחינה קריפטוגרפית. הנוסחה היא פשוטה:

UUID = random_128_bit_number

עם סיביות מסוימות מוגדרות כדי לציין את הגרסה (4) ואת המגוון.

שימושים

ל-UUIDs יש יישומים רבים במגוון תחומים של מדעי המחשב והנדסת תוכנה:

  1. מפתחות מסד נתונים: UUIDs משמשים לעיתים קרובות כמפתחות ראשיים במסדי נתונים, במיוחד במערכות מבוזרות שבהן מספר צמתים עשויים לייצר רשומות בו זמנית.

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

  3. זיהוי תוכן: UUIDs יכולים לשמש ליצירת מזהים ייחודיים לתוכן במערכות אחסון מבוססות תוכן.

  4. ניהול מושבים: יישומי אינטרנט משתמשים לעיתים קרובות ב-UUIDs לניהול מושבי משתמשים, ומבטיחים שכל מושב יהיה בעל מזהה ייחודי.

  5. זיהוי מכשירי IoT: ביישומי האינטרנט של הדברים (IoT), UUIDs יכולים לשמש לזיהוי ייחודי של מכשירים בודדים ברשת.

חלופות

בעוד ש-UUIDs בשימוש נרחב, ישנן גישות חלופיות להפקת מזהים ייחודיים:

  1. מזהים אוטומטיים: פשוטים ונמצאים בשימוש נפוץ במערכות מסד נתונים בודדות, אך אינם מתאימים לסביבות מבוזרות.

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

  3. מזהי Snowflake: פותחו על ידי טוויטר, מזהים אלו משלבים חותמת זמן ומספר עובד כדי לייצר מזהים ייחודיים במערכות מבוזרות.

  4. ULID (מזהה ייחודי אוניברסלי שניתן למיין): חלופה חדשה יותר ששואפת להיות ידידותית יותר למשתמש וניתנת למיון מאשר UUIDs.

היסטוריה

המושג UUIDs הוצג לראשונה במערכת המחשוב של אפולו ולאחר מכן הוסדר על ידי קרן התוכנה הפתוחה (OSF) כחלק מהסביבה של מחשוב מבוזר (DCE) בשנות ה-90. המפרט הראשוני פורסם בשנת 1997 כ-ISO/IEC 11578:1996 ולאחר מכן עודכן בשנת 2005 כחלק מ-ISO/IEC 9834-8:2005.

אבן דרך מרכזית בהיסטוריה של UUID:

  • שנות ה-80: חברת אפולו מחשבים מפתחת את מושג ה-UUID עבור מערכת המחשוב שלה.
  • 1997: מפרט UUID הראשון פורסם כ-ISO/IEC 11578:1996.
  • 2005: מפרט UUID עודכן ופורסם כחלק מ-ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 מגדיר את פורמט ה-UUID ואת אלגוריתמי הגנרציה בשימוש כיום.

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

דוגמאות קוד

הנה דוגמאות להפקת UUIDs בשפות תכנות שונות:

import uuid

## הפקת UUID גרסה 4 (אקראי)
random_uuid = uuid.uuid4()
print(f"UUID גרסה 4: {random_uuid}")

## הפקת UUID גרסה 1 (מבוסס זמן)
time_based_uuid = uuid.uuid1()
print(f"UUID גרסה 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// הפקת UUID גרסה 4 (אקראי)
const randomUuid = uuidv4();
console.log(`UUID גרסה 4: ${randomUuid}`);

// הפקת UUID גרסה 1 (מבוסס זמן)
const timeBasedUuid = uuidv1();
console.log(`UUID גרסה 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // הפקת UUID גרסה 4 (אקראי)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID גרסה 4: " + randomUuid);

        // הפקת UUID גרסה 1 (מבוסס זמן)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID גרסה 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## הפקת UUID גרסה 4 (אקראי)
random_uuid = SecureRandom.uuid
puts "UUID גרסה 4: #{random_uuid}"

## לרובי אין שיטה מובנית עבור UUIDs גרסה 1
## תצטרך להשתמש בג'ם כמו 'uuidtools' עבור זה
<?php
// הפקת UUID גרסה 4 (אקראי)
$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "UUID גרסה 4: " . $randomUuid . "\n";

// לפי.ה.פי אין שיטה מובנית עבור UUIDs גרסה 1
// תצטרך להשתמש בספרייה כמו 'ramsey/uuid' עבור זה
?>

הפניות

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. מזהה ייחודי אוניברסלי. (2023). בויקיפדיה. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. מזהה Snowflake. (2023). בויקיפדיה. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback