Τι είναι πραγματικά ένα UUID
Ένα UUID, συντομογραφία του Universally Unique Identifier (Παγκοσμίως Μοναδικό Αναγνωριστικό), είναι μια τιμή 128 bit που χρησιμοποιείται για να επισημάνει κάτι χωρίς να ζητά την άδεια κανενός πρώτα. Μπορεί επίσης να το δείτε να αποκαλείται GUID, ή Globally Unique Identifier, που είναι απλώς το όνομα που έδωσε η Microsoft στην ίδια ιδέα μέσα στα Windows και τον κόσμο του .NET. Οι δύο όροι περιγράφουν τον ίδιο αριθμό 128 bit σχεδόν σε κάθε περίπτωση που έχει σημασία, οπότε όταν ένας συνάδελφος λέει GUID και εσείς λέτε UUID, σχεδόν πάντα μιλάτε ακριβώς για το ίδιο πράγμα.
Αυτά τα 128 bit γράφονται συνήθως ως 32 δεκαεξαδικά ψηφία χωρισμένα σε πέντε ομάδες με παύλες, σε μοτίβο 8-4-4-4-12. Μια τυπική τιμή μοιάζει με 123e4567-e89b-12d3-a456-426614174000. Οι παύλες δεν φέρουν καμία δική τους σημασία· υπάρχουν αποκλειστικά για να μπορεί ένας άνθρωπος να διαβάσει την τιμή χωρίς να χάσει τη θέση του. Κάθε χαρακτήρας είναι ένα δεκαεξαδικό ψηφίο από το 0 έως το f, γι' αυτό ένα UUID φαίνεται πιο πυκνό από έναν καθημερινό αριθμό, παρόλο που κάτω από την επιφάνεια είναι απλώς ένας πολύ μεγάλος ακέραιος.

Εκδόσεις, και γιατί κερδίζει η v4
Το πρότυπο ορίζει αρκετές εκδόσεις, και διαφέρουν στο πώς γεμίζουν τα bits. Η έκδοση 1 βασίζεται στον χρόνο: συνδυάζει τη τρέχουσα χρονοσφραγίδα με τη διεύθυνση MAC δικτύου του μηχανήματος. Αυτό κάνει τις τιμές v1 ταξινομήσιμες κατά χρόνο δημιουργίας, αλλά επίσης διαρρέει πληροφορίες για το πού και περίπου πότε δημιουργήθηκαν, κάτι που δεν είναι πάντα ευπρόσδεκτο. Οι εκδόσεις 3 και 5 βασίζονται σε όνομα, κάνοντας hash έναν χώρο ονομάτων συν ένα όνομα ώστε η ίδια είσοδος να αποδίδει πάντα το ίδιο αναγνωριστικό.
Η έκδοση 4 ακολουθεί εντελώς διαφορετική διαδρομή. Είναι σχεδόν καθαρή τυχαιότητα. Από τα 128 bit, έξι είναι δεσμευμένα για να σημειώσουν την έκδοση και το variant, αφήνοντας 122 bit να γεμίσουν με τυχαία δεδομένα. Δεν υπάρχει χρονοσφραγίδα, δεν υπάρχει διεύθυνση MAC, δεν υπάρχει χώρος ονομάτων, μόνο θόρυβος. Γι' αυτό ακριβώς οι περισσότερες γεννήτριες, συμπεριλαμβανομένης αυτής, παράγουν v4 από προεπιλογή. Δεν αποκαλύπτει τίποτα για τη συσκευή ή τη στιγμή δημιουργίας, και δεν χρειάζεται συντονισμό μεταξύ των μερών που το δημιουργούν. Το εργαλείο σε αυτή τη σελίδα λειτουργεί εξ ολοκλήρου στον περιηγητή σας, οπότε οι τυχαίες τιμές δεν φεύγουν ποτέ από τη μηχανή σας.
Πόσο απίθανη είναι πραγματικά μια σύγκρουση
Η εύλογη ανησυχία είναι ότι δύο τυχαία UUID μπορεί μια μέρα να είναι πανομοιότυπα. Με 122 τυχαία bit, ο χώρος πιθανών τιμών v4 είναι 2 στη δύναμη του 122, που είναι περίπου 5,3 ακολουθούμενο από 36 μηδενικά. Για να το θέσουμε σε ανθρώπινους όρους, θα χρειαζόταν να δημιουργείτε δισεκατομμύρια UUID κάθε δευτερόλεπτο για πολλές δεκαετίες πριν η πιθανότητα μιας μοναδικής επανάληψης ανέβει σε κάτι μετρήσιμο. Το ίδιο το πρότυπο περιγράφει την πιθανότητα σύγκρουσης ως αρκετά κοντά στο μηδέν ώστε να είναι αμελητέα. Στην πράξη οι ομάδες αντιμετωπίζουν το v4 ως μοναδικό και προχωρούν, και έχουν δίκιο.

Πού απευθύνονται οι προγραμματιστές
Επειδή η μοναδικότητα δεν χρειάζεται κεντρική αρχή, τα UUID λάμπουν σε μέρη όπου ο συντονισμός είναι ακριβός ή αδύνατος. Ταιριάζουν φυσικά ως πρωτεύοντα κλειδιά βάσεων δεδομένων, ειδικά όταν αρκετές υπηρεσίες εισάγουν η καθεμία γραμμές και δεν μπορείτε να σταματήσετε για να ζητήσετε από έναν κοινό μετρητή τον επόμενο αριθμό. Σε κατανεμημένα συστήματα, δύο κόμβοι στις αντίθετες πλευρές του πλανήτη μπορούν και οι δύο να δημιουργήσουν αναγνωριστικά την ίδια στιγμή χωρίς ποτέ να συγκρουστούν. Επίσης τροφοδοτούν κλειδιά αδρανοποίησης (idempotency) API, όπου ένας πελάτης επισυνάπτει ένα UUID σε ένα αίτημα ώστε ο διακομιστής να μπορεί με ασφάλεια να αγνοήσει ένα διπλότυπο αν το δίκτυο ξαναδοκιμάσει. Διακριτικά συνεδρίας, ονόματα αρχείων, αναγνωριστικά συμβάντων, και κλειδιά μηνυμάτων βασίζονται όλα στην ίδια ιδιότητα.
UUID έναντι αναγνωριστικών με αυτόματη αύξηση
Η κλασική εναλλακτική είναι ο ακέραιος με αυτόματη αύξηση: 1, 2, 3, και ούτω καθεξής. Τα διαδοχικά αναγνωριστικά είναι συμπαγή, ταξινομούνται φυσικά, και είναι εύκολα στην ανάγνωση, αλλά έχουν πραγματικά μειονεκτήματα. Αποκαλύπτουν πόσες εγγραφές υπάρχουν και επιτρέπουν σε εξωτερικούς να μαντέψουν γειτονικές τιμές, και αναγκάζουν κάθε εισαγωγή να περάσει μέσα από έναν ενιαίο μετρητή, που γίνεται σημείο συμφόρησης όταν κατακερματίζετε μια βάση δεδομένων ή συγχωνεύετε δεδομένα από πολλές πηγές. Τα UUID λύνουν αυτά τα προβλήματα επιτρέποντας σε οποιοδήποτε μέρος να δημιουργήσει ένα κλειδί ανεξάρτητα και μη αποκαλύπτοντας τίποτα για τον όγκο ή τη σειρά. Το κόστος είναι το μέγεθος και λίγο λιγότερη τοπικότητα σε ευρετήρια. Για συστήματα που κλιμακώνονται οριζόντια ή που πρέπει να κρύβουν τα εσωτερικά τους, αυτό το κόστος συνήθως αξίζει τον κόπο. Μπορείτε να εξερευνήσετε αυτό και παρόμοια εργαλεία μέσα από τη συλλογή όλων των γεννητριών μας, ή να περιηγηθείτε στο ευρύτερο σύνολο εργαλείων για προγραμματιστές για σχετικά δομικά στοιχεία.
Συχνές ερωτήσεις
Είναι το GUID το ίδιο με το UUID;
Για καθημερινούς σκοπούς, ναι. GUID είναι το όνομα της Microsoft για το ίδιο αναγνωριστικό 128 bit. Η μόνη πραγματική διαφορά είναι η σειρά byte στην ακατέργαστη δυαδική μορφή σε ορισμένα συστήματα Windows· σε μορφή συμβολοσειράς είναι πανομοιότυπα και εναλλάξιμα.
Ποια έκδοση UUID δημιουργεί αυτό το εργαλείο;
Δημιουργεί την έκδοση 4, την τυχαία παραλλαγή. Από τα 128 bit της, τα 122 γεμίζουν με τυχαία δεδομένα, κάτι που κάνει κάθε τιμή εξαιρετικά απίθανο να επαναληφθεί και σημαίνει ότι δεν φέρει καμία χρονοσφραγίδα ή πληροφορία συσκευής.
Μπορούν δύο UUID να είναι ποτέ ίδια;
Θεωρητικά η πιθανότητα δεν είναι ακριβώς μηδέν, αλλά με περίπου 5,3 επί 10 στη δύναμη του 36 πιθανές τιμές v4 είναι τόσο μικρή που θεωρείται αμελητέα. Θα έπρεπε να δημιουργήσετε αστρονομικούς αριθμούς από αυτά πριν μια σύγκρουση γίνει πιθανή.
Γιατί να χρησιμοποιήσω UUID αντί για αριθμό με αυτόματη αύξηση;
Τα UUID μπορούν να δημιουργηθούν ανεξάρτητα από οποιαδήποτε υπηρεσία χωρίς κοινό μετρητή, δεν αποκαλύπτουν πλήθος εγγραφών ή σειρά, και κάνουν τη συγχώνευση δεδομένων από πολλές πηγές ανώδυνη. Τα αναγνωριστικά με αυτόματη αύξηση είναι μικρότερα αλλά γίνονται σημείο συμφόρησης και διαρρέουν πληροφορίες σε κλίμακα.
Δημιουργούνται τα UUID σε διακομιστή;
Όχι. Αυτό το εργαλείο λειτουργεί εξ ολοκλήρου στον περιηγητή σας, οπότε οι τυχαίες τιμές παράγονται τοπικά και δεν αποστέλλονται ποτέ πουθενά. Αυτό το κάνει ασφαλές για χρήση σε κλειδιά και διακριτικά που σκοπεύετε να διατηρήσετε ιδιωτικά.
Τι σημαίνει το μοτίβο με τις παύλες;
Η ομαδοποίηση 8-4-4-4-12 είναι απλώς μια σύμβαση αναγνωσιμότητας. Οι παύλες δεν φέρουν δεδομένα· χωρίζουν τα 32 δεκαεξαδικά ψηφία σε κομμάτια ώστε ο κόσμος να μπορεί να σαρώνει και να συγκρίνει τιμές πιο εύκολα.
