מה זה בעצם UUID
UUID, ראשי תיבות של Universally Unique Identifier (מזהה ייחודי אוניברסלי), הוא ערך בן 128 סיביות שמשמש לתייג משהו בלי לבקש רשות מאף אחד קודם. אתם עשויים גם לראות אותו נקרא GUID, או Globally Unique Identifier, שזה פשוט השם שמיקרוסופט נתנה לאותו רעיון בתוך Windows ועולם ה-.NET. שני המונחים מתארים את אותו מספר בן 128 סיביות בכמעט כל מקרה שחשוב, כך שכשעמית אומר GUID ואתם אומרים UUID, כמעט תמיד מדובר באותו הדבר בדיוק.
128 הסיביות האלה נכתבות בדרך כלל כ-32 ספרות הקסדצימליות מחולקות לחמש קבוצות באמצעות מקפים, בדפוס 8-4-4-4-12. ערך טיפוסי נראה כך: 123e4567-e89b-12d3-a456-426614174000. למקפים אין משמעות משלהם; הם קיימים אך ורק כדי שבן אדם יוכל לקרוא את הערך בלי לאבד את מקומו. כל תו הוא ספרה הקסדצימלית מ-0 עד f, ולכן UUID מרגיש צפוף יותר ממספר יומיומי למרות שהוא, מתחת לפני השטח, פשוט מספר שלם אחד גדול מאוד.

גרסאות, ולמה v4 מנצחת
התקן מגדיר כמה גרסאות, והן נבדלות באופן שבו הסיביות ממולאות. גרסה 1 מבוססת זמן: היא שוזרת יחד את חותמת הזמן הנוכחית וכתובת ה-MAC הרשתית של המכשיר. זה הופך ערכי v1 לניתנים למיון לפי זמן יצירה, אבל זה גם מדליף מידע על היכן ובקירוב מתי הם נוצרו, מה שלא תמיד רצוי. גרסאות 3 ו-5 מבוססות שם, מבצעות hashing למרחב שמות בתוספת שם כך שאותו קלט תמיד יניב את אותו מזהה.
גרסה 4 נוקטת בדרך שונה לחלוטין. היא כמעט אקראיות טהורה. מתוך 128 הסיביות, שש שמורות לסימון הגרסה והווריאנט, ומשאירות 122 סיביות למילוי בנתונים אקראיים. אין חותמת זמן, אין כתובת MAC, אין מרחב שמות, רק רעש. זו בדיוק הסיבה שרוב המחוללים, כולל זה, מייצרים v4 כברירת מחדל. זה לא חושף דבר על המכשיר או רגע היצירה, וזה לא דורש תיאום בין הצדדים שיוצרים אותו. הכלי בדף הזה רץ כולו בדפדפן שלכם, כך שהערכים האקראיים אף פעם לא עוזבים את המכשיר שלכם.
עד כמה התנגשות היא באמת בלתי סבירה
הדאגה הסבירה היא ששני UUID אקראיים עלולים יום אחד להיות זהים. עם 122 סיביות אקראיות, מרחב הערכים האפשריים של v4 הוא 2 בחזקת 122, שזה בקירוב 5.3 ועוד 36 אפסים. כדי לתרגם את זה למונחים אנושיים, תצטרכו לייצר מיליארדי UUID בכל שנייה במשך עשרות שנים לפני שהסיכוי לכפילות בודדת יטפס למשהו שאפשר למדוד. התקן עצמו מתאר את הסיכוי להתנגשות כקרוב מספיק לאפס כדי להיות זניח. בפועל צוותים מתייחסים ל-v4 כייחודי וממשיכים הלאה, ובצדק.

איפה מפתחים משתמשים בהם
מכיוון שהייחודיות לא דורשת רשות מרכזית, UUID זורח במקומות שבהם תיאום יקר או בלתי אפשרי. הם התאמה טבעית למפתחות ראשיים במסדי נתונים, במיוחד כאשר כמה שירותים כל אחד מכניס שורות ואי אפשר לעצור כדי לשאול מונה משותף מה המספר הבא. במערכות מבוזרות, שני צמתים בקצוות מנוגדים של כדור הארץ יכולים שניהם להטביע מזהים באותו רגע בדיוק בלי להתנגש אף פעם. הם גם מפעילים מפתחות אידמפוטנטיות של API, שבהם לקוח מצרף UUID לבקשה כך שהשרת יכול להתעלם בבטחה מכפילות אם הרשת מנסה שוב. אסימוני session, שמות קבצים, מזהי אירועים, ומפתחות הודעות כולם נשענים על אותה תכונה.
UUID לעומת מזהים עולים אוטומטית
האלטרנטיבה הקלאסית היא מספר שלם עולה אוטומטית: 1, 2, 3, וכן הלאה. מזהים סדרתיים קומפקטיים, ממוינים באופן טבעי, וקלים לקריאה, אבל יש להם חסרונות אמיתיים. הם חושפים כמה רשומות קיימות ומאפשרים לגורמים חיצוניים לנחש ערכים שכנים, והם מכריחים כל הכנסה לעבור דרך מונה יחיד, שהופך לצוואר בקבוק כאשר אתם מפצלים מסד נתונים או ממזגים מידע ממקורות רבים. UUID פותרים את הבעיות האלה על ידי כך שהם מאפשרים לכל צד לייצר מפתח באופן עצמאי ולא מגלים דבר על הנפח או הסדר. המחיר הוא גודל ומעט פחות לוקאליות באינדקסים. עבור מערכות שמתרחבות החוצה או שחייבות להסתיר את הפנימיות שלהן, המחיר הזה בדרך כלל שווה את זה. תוכלו לחקור כלי זה וכלים דומים דרך אוסף כל המחוללים שלנו, או לעיין במגוון הרחב יותר של כלי מפתחים עבור בלוקי בנייה קשורים.
שאלות נפוצות
האם GUID זהה ל-UUID?
למטרות יומיומיות, כן. GUID הוא השם של מיקרוסופט לאותו מזהה בן 128 סיביות. ההבדל האמיתי היחיד הוא סדר הבתים בצורה הבינארית הגולמית במערכות Windows מסוימות; בצורת מחרוזת הם זהים וניתנים להחלפה.
איזו גרסת UUID הכלי הזה מייצר?
הוא מייצר גרסה 4, הווריאנט האקראי. מתוך 128 הסיביות שלה, 122 ממולאות בנתונים אקראיים, מה שהופך כל ערך לבלתי סביר ביותר שיחזור על עצמו ואומר שהוא לא נושא חותמת זמן או מידע מכשיר.
האם שני UUID יכולים להיות זהים אי פעם?
בתיאוריה ההסתברות היא לא בדיוק אפס, אבל עם בערך 5.3 כפול 10 בחזקת 36 ערכי v4 אפשריים זה כה זעום שמתייחסים אליו כזניח. תצטרכו לייצר כמות אסטרונומית מהם לפני שהתנגשות תהפוך לסבירה.
למה להשתמש ב-UUID במקום במספר עולה אוטומטית?
UUID יכולים להיווצר באופן עצמאי על ידי כל שירות ללא מונה משותף, הם לא חושפים ספירת רשומות או סדר, והם הופכים מיזוג מידע ממקורות רבים לחסר כאב. מזהים עולים אוטומטית קטנים יותר אבל הופכים לצוואר בקבוק ומדליפים מידע בקנה מידה גדול.
האם ה-UUID מיוצרים בשרת?
לא. הכלי הזה רץ כולו בדפדפן שלכם, כך שהערכים האקראיים מיוצרים מקומית ואף פעם לא נשלחים לשום מקום. זה הופך אותו לבטוח לשימוש עבור מפתחות ואסימונים שאתם מתכוונים לשמור פרטיים.
מה משמעות דפוס המקפים?
הקיבוץ 8-4-4-4-12 הוא רק מוסכמה לקריאות. למקפים אין מידע; הם מפצלים את 32 ספרות ההקס לחלקים כך שאנשים יכולים לסרוק ולהשוות ערכים בקלות רבה יותר.
