דלג לתוכן

יוצר CUID יעיל למזהים ייחודיים במערכות

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

מחולל CUID

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

לחץ על "צור CUID חדש" כדי ליצור מזהה.
מחשבון טעינה...
📚

תיעוד

מהו CUID?

CUID (מזהה ייחודי עמיד בפני התנגשויות) הוא מחרוזת קצרה של אותיות וספרות המשמשת לסימון רשומה, קובץ או אירוע, כך שלא יהיו שני פריטים בעלי אותו שם. כלי זה מייצר CUID2, הגרסה הנוכחית של הפורמט, באמצעות הספרייה @paralleldrive/cuid2. כל מזהה הוא באורך 25 תווים, מכיל רק אותיות קטנות וספרות, ונוצר כולו בדפדפן — שום דבר לא נשלח לשרת.

כיצד להשתמש במחולל CUID זה

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

המזהה שנוצר נשמר גם בכתובת ה-URL של הדף, כך שאפשר לשתף קישור לתוצאה או לשמור אותו כסימנייה.

המבנה והנוסחה של CUID2

CUID2 נבנה כך:

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

פונקציית הגיבוב משלבת ארבעה קלטים פרטיים: הזמן הנוכחי, מונה לכל הפעלה, טביעת אצבע של המחשב המארח ואנטרופיה אקראית. היא מעבירה אותם דרך SHA3-512, ממירה את התוצאה לבסיס 36 (ספרות 0–9 והאותיות a-z), ולאחר מכן שומרת 24 מהתווים האלה. האות הראשונה האקראית מביאה את המזהה המוגמר לאורך של 25 תווים, שהוא האורך שהוגדר לכלי זה.

רק התוו הראשון עומד בפני עצמו: אות אקראית המוצבת בתחילת המזהה, כך שכל מזהה יתחיל באות ולא בספרה. מערכות רבות, כגון שמות של טבלאות ועמודות ב-SQL, דורשות שמזהים יתחילו באות, ולכן כך אפשר להשתמש ב-CUID2 כשם כמעט בכל מקום. כל תו אחרי האות הראשונה הוא חלק מגוף גיבוב רציף ואטום אחד — אין בו מקטעים נפרדים.

מאחר שהגיבוב פועל בכיוון אחד בלבד, אי אפשר לחלץ ממנו את הקלטים שלו מתוך המזהה המוגמר. ל-CUID2 אין חותמת זמן הניתנת לשחזור, מונה הניתן לשחזור או טביעת אצבע הניתנת לשחזור. זוהי בחירה מכוונת של פרטיות ואבטחה: מזהה לבדו אינו יכול לחשוף מתי או היכן נוצר.

דוגמה פתורה

יצירת מזהה באמצעות כלי זה עשויה להניב:

1vcpuhcj51eomj1o31dnlqopu0
2

כאן v היא האות הראשונה האקראית, ו-cpuhcj51eomj1o31dnlqopu0 (24 תווים) הוא גוף הגיבוב. שני החלקים נראים שונים רק משום שהתוו הראשון מובטח להיות אות — גוף הגיבוב יכול להכיל שילוב של אותיות וספרות.

מדוע מערכות משתמשות ב-CUID2

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

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

CUID2 לעומת UUID לעומת מזהים הגדלים אוטומטית

תכונהCUID2UUID v4גידול אוטומטי
אורך25 תווים36 תווים (עם מקפים)משתנה (בדרך כלל מספר קצר)
קבוצת תוויםאותיות קטנות וספרותספרות הקסדצימליות ומקפיםספרות
דורש תיאום מרכזילאלאכן (רצף של מסד נתונים)
ניתן למיון לפי זמן היצירהלאלאכן
מתאים לכתובת URL ללא קידודכןכןכן

CUID2 ו-UUID v4 פותרים את אותה בעיה: יצירת מזהים ללא תיאום מרכזי. CUID2 קצר יותר ומשתמש בקבוצת תווים מצומצמת יותר, ולכן קל יותר לקרוא אותו ולהדביק אותו בכתובת URL. UUID בטוח גם הוא לשימוש בכתובת אינטרנט, משום שהמקף הוא תו שאינו דורש קידוד בכתובות URL, אך הוא ארוך ב-11 תווים.

שימושים נפוצים

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

היסטוריה קצרה

פורמט CUID המקורי פורסם על ידי Eric Elliott בשנת 2012 כחלופה ל-UUID עבור יישומים מבוזרים. CUID2, שפורסם על ידי אותו פרויקט Paralleldrive, עיצב מחדש את הפורמט סביב גיבוב קריפטוגרפי והסיר את חותמת הזמן והמונה הניתנים לשחזור שהגרסה המקורית חשפה. כלי זה מייצר רק מזהי CUID2.

שאלות נפוצות

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

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

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

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

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

האם אפשר להשתמש ב-CUID2 כמפתח ראשי במסד נתונים? כן. מזהי CUID2 מתאימים היטב כמפתחות ראשיים במסדי נתונים מבוזרים, מכיוון שכל צומת יכול ליצור מזהה בלי לבדוק מול רצף מרכזי. הם אינם ממוינים באופן טבעי לפי זמן ההוספה, ולכן יישום הזקוק לסדר זה צריך לשמור עמודת created_at נפרדת.