Τι είναι το ULID;
ULID (Παγκοσμίως Μοναδικός Λεξικογραφικά Ταξινομήσιμος Αναγνωριστής) είναι μια μορφή αναγνωριστικού 128-bit σχεδιασμένη να ξεπεράσει τους περιορισμούς των UUID. Αποτελείται από:
- Timestamp: 48 bits ακρίβειας χιλιοστών του δευτερολέπτου Unix time
- Randomness: 80 bits κρυπτογραφικά ασφαλών τυχαίων δεδομένων
- Encoding: Αναπαράσταση Base32 (26 χαρακτήρες)
Παράδειγμα μορφής: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Πώς λειτουργεί το ULID
- Δημιουργία 48 bits για χρονική σήμανση (Unix time σε χιλιοστά του δευτερολέπτου)
- Δημιουργία 80 bits κρυπτογραφικά ασφαλών τυχαίων δεδομένων
- Συνδυασμός χρονικής σήμανσης (πιο σημαντικό) με τυχαιότητα (λιγότερο σημαντικό)
- Κωδικοποίηση ολόκληρης της τιμής 128-bit χρησιμοποιώντας το αλφάβητο Base32 του Crockford
- Το αποτέλεσμα είναι μια συμβολοσειρά 26 χαρακτήρων (οι πρώτοι 10 χαρακτήρες είναι χρονική σήμανση, οι τελευταίοι 16 είναι τυχαιότητα)
Πλεονεκτήματα & Σκέψεις
Advantages | Considerations |
---|---|
|
|
Δομή ULID
Component | Bits | Characters | Description |
---|---|---|---|
Timestamp | 48 bits | 10 χαρακτήρες | Unix timestamp (ms) κωδικοποιημένο σε Base32 |
Randomness | 80 bits | 16 χαρακτήρες | Τυχαία bytes κωδικοποιημένα σε Base32 |
Σύγκριση ULID με UUID
Feature | ULID | UUID v1 | UUID v4 | UUID v7 |
---|---|---|---|---|
Size | 128 bits | 128 bits | 128 bits | 128 bits |
Μήκος συμβολοσειράς | 26 χαρακτήρες | 36 χαρακτήρες | 36 χαρακτήρες | 36 χαρακτήρες |
Time-based | ✅ | ✅ | ❌ | ✅ |
Φυσική ταξινόμηση | ✅ | ❌ | ❌ | ✅ |
Ασφαλές για URL | ✅ | ❌ | ❌ | ❌ |
Έκθεση διεύθυνσης MAC | ❌ | ✅ | ❌ | ❌ |
Τυχαίο συστατικό | ✅ | ❌ | ✅ | ✅ |
Κανoνικό πρότυπο | ❌ | ✅ | ✅ | ⚠️ Προσχέδιο |
Συνηθισμένες περιπτώσεις χρήσης
- Πρωτεύοντα κλειδιά βάσης δεδομένων: Βελτιστοποιημένοι δείκτες απόδοσης
- Κατανεμημένα συστήματα: Δημιουργία χωρίς συντονισμό
- APIs: Καθαρά, ασφαλή για URL αναγνωριστικά
- Δεδομένα χρονικών σειρών: Φυσική χρονολογική ταξινόμηση
- Συστήματα καταγραφής: Ταξινομήσιμα αναγνωριστικά γεγονότων
- Μοντέρνες εφαρμογές: Όπου οι περιορισμοί των UUID είναι προβληματικοί
Γιατί να επιλέξετε ULID;
- Sortability: Λεξικογραφική ταξινόμηση κατά χρόνο δημιουργίας
- Ασφάλεια URL: Δεν απαιτείται κωδικοποίηση URL (σε αντίθεση με UUID με παύλες)
- Compactness: 26 χαρακτήρες έναντι 36 για UUID
- Ανεξαρτησία πεζών-κεφαλαίων: Μειώνει τα σφάλματα εισαγωγής χρήστη
- Monotonicity: Προαιρετική μονοτονική ταξινόμηση εντός του ίδιου χιλιοστού του δευτερολέπτου
- Χωρίς ειδικούς χαρακτήρες: Απλή, μόνο αλφαριθμητική μορφή
Συχνές Ερωτήσεις
Πώς συγκρίνεται το ULID με το UUID v7;
Και οι δύο χρησιμοποιούν Unix timestamps για ταξινομησιμότητα και έχουν τυχαία συστατικά. Οι βασικές διαφορές είναι η κωδικοποίηση (Base32 έναντι hex), η μορφή (26 χαρακτήρες έναντι 36) και η τυποποίηση (UUID v7 είναι σε προσχέδιο προδιαγραφής RFC).
Μπορώ να εξάγω τον χρόνο δημιουργίας από ένα ULID;
Ναι. Οι πρώτοι 10 χαρακτήρες αντιπροσωπεύουν ένα Unix timestamp με ακρίβεια χιλιοστού του δευτερολέπτου που μπορεί να αποκωδικοποιηθεί και να μετατραπεί σε τυπική ημερομηνία και ώρα.
Είναι τα ULID συμβατά με πεδία βάσης δεδομένων UUID;
Όχι. Τα ULID χρησιμοποιούν διαφορετική μορφή και πρέπει να αποθηκεύονται ως συμβολοσειρές ή δυαδικά δεδομένα αντί για εγγενείς τύπους UUID στη βάση δεδομένων.
Τι είναι η μονοτονικότητα στα ULID;
Ορισμένες υλοποιήσεις ULID προσφέρουν επιλογή μονοτονικότητας που εξασφαλίζει διαδοχική σειρά ταξινόμησης ακόμη και εντός του ίδιου χιλιοστού του δευτερολέπτου αυξάνοντας το τυχαίο συστατικό για ULID που δημιουργούνται στην ίδια χρονική σήμανση.
Ποιο σετ χαρακτήρων χρησιμοποιεί το ULID;
Το ULID χρησιμοποιεί την κωδικοποίηση Base32 του Crockford (0-9, A-Z εξαιρώντας I, L, O, U) που έχει σχεδιαστεί για να ελαχιστοποιεί τη σύγχυση και τα σφάλματα καταγραφής όταν τα IDs διαβάζονται ή εισάγονται χειροκίνητα.
Resources
Αλφάβητο Base32 του Crockford
Αξία κωδικοποίησης | Character | Notes |
---|---|---|
0-9 | 0-9 | Δεκαδικά ψηφία |
10-31 | A-Z | Εξαιρώντας I, L, O, U για ευανάγνωστοτητα |
Χαρακτήρες: 0123456789ABCDEFGHJKMNPQRSTVWXYZ
Αυτή η κωδικοποίηση είναι ανεξάρτητη πεζών-κεφαλαίων για την αποκωδικοποίηση (αλλά τα ULID συνήθως δημιουργούνται με κεφαλαία).