גנרטור ULID
ULID שנוצר:
מבנה ULID
חותמת זמן (10 תווים)
אקראיות (16 תווים)
ULID Generator
Introduction
ULID (מזהה ייחודי אוניברסלי מסודר לקסיקוגרפית) הוא מזהה ייחודי שמשלב חותמת זמן עם נתונים אקראיים כדי ליצור מיתר של 26 תווים. ULIDs תוכננו להיות מסודרים לקסיקוגרפית תוך שמירה על רמה גבוהה של ייחודיות ואקראיות.
Structure of a ULID
ULID מורכב משני חלקים עיקריים:
- חותמת זמן (10 תווים): 10 התווים הראשונים מייצגים את הזמן במילישניות מאז תקופת יוניקס (1970-01-01).
- אקראיות (16 תווים): 16 התווים הנותרים נוצרו בעזרת נתונים אקראיים מאובטחים מבחינה קריפטוגרפית.
המיתר בן 26 התווים המתקבל מקודד באמצעות אלפבית הבסיס 32 של קרוקפורד (0-9 ו-A-Z, למעט I, L, O ו-U).
Formula
ULID נוצר באמצעות הצעדים הבאים:
- הפקת חותמת זמן של 48 סיביות (מילישניות מאז תקופת יוניקס).
- הפקת 80 סיביות של נתונים אקראיים מאובטחים מבחינה קריפטוגרפית.
- קידוד 128 הסיביות המשולבות באמצעות קידוד הבסיס 32 של קרוקפורד.
Calculation
גנרטור ה-ULID מבצע את הצעדים הבאים:
- קבלת חותמת הזמן הנוכחית במילישניות.
- הפקת 10 בתים אקראיים (80 סיביות) באמצעות גנרטור מספרים אקראיים מאובטח מבחינה קריפטוגרפית.
- שילוב חותמת הזמן ונתוני האקראיות לאינטגרל של 128 סיביות.
- קידוד האינטגרל של 128 הסיביות באמצעות קידוד הבסיס 32 של קרוקפורד.
Use Cases
ULIDs שימושיים במגוון תרחישים, כולל:
- מפתחות בסיס נתונים: ULIDs יכולים לשמש כמזהים ייחודיים לרשומות בבסיס נתונים, תוך הבטחת ייחודיות וסדר.
- מערכות מפוזרות: בסביבות מפוזרות, ניתן לייצר ULIDs מבלי צורך בתיאום בין צמתים.
- יומן ומעקב: ULIDs יכולים לשמש לתיוג רשומות יומן או מעקב אחרי אירועים, תוך מתן מזהה ייחודי ומסודר.
- מזהים ידידותיים ל-URL: ULIDs בטוחים לשימוש ב-URL וניתן להשתמש בהם באפליקציות אינטרנט כמזהים ב-URL.
Alternatives
בעוד ש-ULIDs הם רב-תכליתיים, ישנם מערכות מזהים ייחודיים אחרות לשקול:
- UUID (מזהה ייחודי אוניברסלי): מזהה של 128 סיביות שאינו כולל רכיב חותמת זמן.
- KSUID (מזהה ייחודי מסודר K): דומה ל-ULID אך עם קידוד חותמת זמן שונה.
- מזהה Snowflake: מערכת ייצור מזהים ייחודיים מפוזרת של טוויטר, הכוללת חותמת זמן ומזהה עובד.
History
ULIDs הוצגו בשנת 2016 על ידי אליזין פיירסטה כאפשרות חלופית ל-UUIDs. הם תוכננו להתמודד עם כמה מגבלות של UUIDs, במיוחד מבחינת סדר וקריאות. המפרט של ULID נשאר יציב מאז הצגתו, עם יישומים שונים זמינים בשפות תכנות שונות.
Examples
הנה כמה דוגמאות קוד ליצירת ULIDs בשפות תכנות שונות:
// יישום ב-JavaScript
function generateULID() {
const timestamp = Date.now().toString(36).padStart(10, '0');
const randomness = crypto.getRandomValues(new Uint8Array(16))
.reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
return (timestamp + randomness).toUpperCase();
}
console.log(generateULID());
דוגמאות אלו מדגימות כיצד לייצר ULIDs ב-JavaScript, Python ו-Java. ניתן להתאים את הפונקציות הללו לצרכים הספציפיים שלך או לשלב אותן במערכות גדולות יותר שדורשות מזהים ייחודיים.
References
- "מפרט ULID." GitHub, https://github.com/ulid/spec. גישה 2 אוגוסט 2024.
- "קידוד בסיס 32 של קרוקפורד." קידוד בסיס 32, http://www.crockford.com/base32.html. גישה 2 אוגוסט 2024.
- "UUID מול ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. גישה 2 אוגוסט 2024.