Αποδοτικός Δημιουργός CUID για Μοναδικά Αναγνωριστικά σε Συστήματα
Δημιουργήστε μοναδικά αναγνωριστικά ανθεκτικά σε συγκρούσεις (CUIDs) για κατανεμημένα συστήματα, βάσεις δεδομένων και διαδικτυακές εφαρμογές. Δημιουργήστε άμεσα κλιμακωτά, ταξινομήσιμα αναγνωριστικά.
Γεννήτρια CUID
Δημιουργήστε ένα αναγνωριστικό ανθεκτικό σε συγκρούσεις γρήγορα και εύκολα.
Τεκμηρίωση
Τι είναι ένα CUID;
Ένα CUID (μοναδικό αναγνωριστικό ανθεκτικό σε συγκρούσεις) είναι μια σύντομη συμβολοσειρά γραμμάτων και ψηφίων που χρησιμοποιείται για την επισήμανση μιας εγγραφής, ενός αρχείου ή ενός συμβάντος, ώστε κανένα ζεύγος στοιχείων να μην έχει το ίδιο όνομα. Αυτό το εργαλείο δημιουργεί το CUID2, την τρέχουσα έκδοση της μορφής, χρησιμοποιώντας τη βιβλιοθήκη @paralleldrive/cuid2. Κάθε αναγνωριστικό αποτελείται από 25 χαρακτήρες, περιέχει μόνο πεζά γράμματα και ψηφία και δημιουργείται εξ ολοκλήρου στο πρόγραμμα περιήγησης — τίποτα δεν αποστέλλεται σε διακομιστή.
Πώς να χρησιμοποιήσετε αυτήν τη γεννήτρια CUID
- Κάντε κλικ στην επιλογή Δημιουργία νέου CUID για να δημιουργήσετε ένα αναγνωριστικό.
- Κάντε κλικ στην επιλογή Αντιγραφή στο πρόχειρο για να το αντιγράψετε.
- Επικολλήστε το αναγνωριστικό σε μια βάση δεδομένων, σε ένα όνομα αρχείου ή σε μια εφαρμογή.
- Κάντε ξανά κλικ στη δημιουργία για άλλο αναγνωριστικό. Οι συγκρούσεις μεταξύ διαφορετικών τιμών CUID2 είναι εξαιρετικά απίθανες, αν και όχι μαθηματικά αδύνατες.
- Κάντε κλικ στην επιλογή Επαναφορά για να διαγράψετε το αποτέλεσμα.
Το αναγνωριστικό που δημιουργήθηκε αποθηκεύεται επίσης στη διεύθυνση 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 έναντι αναγνωριστικών αυτόματης αρίθμησης
| Χαρακτηριστικό | CUID2 | UUID v4 | Αυτόματη αρίθμηση |
|---|---|---|---|
| Μήκος | 25 χαρακτήρες | 36 χαρακτήρες (με ενωτικά) | Διαφέρει (συνήθως ένας μικρός αριθμός) |
| Σύνολο χαρακτήρων | Πεζά γράμματα και ψηφία | Δεκαεξαδικά ψηφία και ενωτικά | Ψηφία |
| Απαιτεί κεντρικό συντονισμό | Όχι | Όχι | Ναι (ακολουθία βάσης δεδομένων) |
| Ταξινομήσιμο κατά χρόνο δημιουργίας | Όχι | Όχι | Ναι |
| Κατάλληλο για URL χωρίς κωδικοποίηση | Ναι | Ναι | Ναι |
Τα CUID2 και UUID v4 επιλύουν το ίδιο πρόβλημα: τη δημιουργία αναγνωριστικών χωρίς κεντρικό συντονισμό. Το CUID2 είναι μικρότερο και χρησιμοποιεί μικρότερο σύνολο χαρακτήρων, γεγονός που διευκολύνει την ανάγνωση και την επικόλλησή του σε ένα URL. Ένα UUID είναι επίσης ασφαλές σε μια διεύθυνση ιστού, επειδή το ενωτικό είναι μη δεσμευμένος χαρακτήρας στα URL, αλλά έχει 11 χαρακτήρες περισσότερους.
Συνήθεις χρήσεις
- Πρωτεύοντα κλειδιά σε κατανεμημένες βάσεις δεδομένων, όπου πολλοί διακομιστές εισάγουν γραμμές ανεξάρτητα
- Αναγνωριστικά αιτημάτων ή ιχνηλάτησης που χρησιμοποιούνται για την παρακολούθηση μιας ενέργειας σε πολλές μικροϋπηρεσίες
- Ονόματα αρχείων για μεταφορτώσεις, ώστε δύο αρχεία να μην αντικαθιστούν ποτέ το ένα το άλλο
- Αναγνωριστικά συνεδρίας ή διακριτικών για διαδικτυακές εφαρμογές
- Αναγνωριστικά μηνυμάτων σε ουρές όπως το Kafka ή το RabbitMQ
Σύντομη ιστορία
Η αρχική μορφή CUID κυκλοφόρησε από τον Eric Elliott το 2012 ως εναλλακτική των UUID για κατανεμημένες εφαρμογές. Το CUID2, που δημοσιεύτηκε από το ίδιο έργο Paralleldrive, επανασχεδίασε τη μορφή γύρω από έναν κρυπτογραφικό κατακερματισμό και αφαίρεσε τη χρονική σήμανση και τον μετρητή που μπορούσαν να ανακτηθούν από την αρχική έκδοση. Αυτό το εργαλείο δημιουργεί μόνο αναγνωριστικά CUID2.
Συχνές ερωτήσεις
Ποια είναι η διαφορά μεταξύ του CUID (v1) και του CUID2; Το CUID v1 αποθήκευε μια εμφανή χρονική σήμανση και έναν μετρητή μέσα στο αναγνωριστικό, γεγονός που επέτρεπε την ταξινόμηση των αναγνωριστικών, αλλά αποκάλυπτε επίσης πότε και πόσα αναγνωριστικά είχαν δημιουργηθεί. Το CUID2 αντικαθιστά αυτά τα εμφανή πεδία με έναν μονόδρομο κατακερματισμό, ώστε να μην είναι δυνατή η ανάκτηση πληροφοριών από το αναγνωριστικό.
Ταξινομούνται τα CUID αυτού του εργαλείου κατά χρόνο δημιουργίας; Όχι. Ένα CUID2 δεν περιέχει ανακτήσιμη χρονική σήμανση, επομένως τα αναγνωριστικά δεν μπορούν να ταξινομηθούν με βάση το πότε δημιουργήθηκαν μόνο από την εξέταση της συμβολοσειράς.
Πόσο μεγάλο είναι ένα αναγνωριστικό που δημιουργείται και μπορεί να αλλάξει το μήκος του; Αυτό το εργαλείο δημιουργεί πάντα αναγνωριστικά 25 χαρακτήρων. Δεν υπάρχει επιλογή σε αυτό το εργαλείο για αίτημα διαφορετικού μήκους.
Μπορούν δύο διαφορετικοί υπολογιστές να δημιουργήσουν το ίδιο CUID2 ταυτόχρονα; Θεωρητικά είναι δυνατό, αλλά στην πράξη εξαιρετικά απίθανο. Κάθε αναγνωριστικό συνδυάζει ένα αποτύπωμα ειδικό για τον κεντρικό υπολογιστή με τυχαία εντροπία, επομένως είναι εξαιρετικά απίθανο ανεξάρτητοι υπολογιστές να δημιουργήσουν ποτέ τον ίδιο κατακερματισμό.
Αποστέλλει αυτό το εργαλείο δεδομένα σε διακομιστή; Όχι. Το αναγνωριστικό δημιουργείται από JavaScript που εκτελείται στο πρόγραμμα περιήγησης, χρησιμοποιώντας το τοπικό ρολόι του συστήματος και την τυχαιότητα που παρέχει το πρόγραμμα περιήγησης. Δεν μεταδίδεται τίποτα.
Μπορώ να χρησιμοποιήσω ένα CUID2 ως πρωτεύον κλειδί βάσης δεδομένων;
Ναι. Τα αναγνωριστικά CUID2 λειτουργούν καλά ως πρωτεύοντα κλειδιά σε κατανεμημένες βάσεις δεδομένων, επειδή οποιοσδήποτε κόμβος μπορεί να δημιουργήσει ένα χωρίς να ελέγξει μια κεντρική ακολουθία. Δεν ταξινομούνται φυσικά κατά χρόνο εισαγωγής, επομένως μια εφαρμογή που χρειάζεται αυτήν τη σειρά θα πρέπει να διατηρεί ξεχωριστή στήλη created_at.