Μετάβαση στο περιεχόμενο

Γεννήτρια MongoDB ObjectID - Δημιουργία Μοναδικών Αναγνωριστικών BSON

Δημιουργήστε μοναδικά αναγνωριστικά MongoDB ObjectID άμεσα με το δωρεάν διαδικτυακό μας εργαλείο. Παράγετε έγκυρα 12-byte BSON αναγνωριστικά για δοκιμές, ανάπτυξη και λειτουργίες βάσης δεδομένων. Καμία εγκατάσταση δεν απαιτείται.

Γεννήτρια MongoDB ObjectID

Υπολογιστής φόρτωσης...
📚

Τεκμηρίωση

Τι είναι ένα MongoDB ObjectID;

Ένα MongoDB ObjectID είναι μια τιμή 12 byte που το MongoDB εκχωρεί από προεπιλογή στο πεδίο _id κάθε εγγράφου. Γράφεται ως 24 πεζοί δεκαεξαδικοί χαρακτήρες, για παράδειγμα 507f1f77bcf86cd799439011. Αυτό το εργαλείο δημιουργεί από 1 έως 100 έγκυρα ObjectID κάθε φορά, απευθείας στο πρόγραμμα περιήγησης, χωρίς να απαιτείται σύνδεση με βάση δεδομένων.

Δομή MongoDB ObjectID

Ένα ObjectID αποτελείται από τρία μέρη, τοποθετημένα το ένα μετά το άλλο:

  • Χρονοσφραγίδα (4 byte). Ο αριθμός των δευτερολέπτων από την 1 Ιανουαρίου 1970 (την εποχή Unix), αποθηκευμένος ως μη προσημασμένος αριθμός με σειρά byte big-endian. Καταγράφει πότε δημιουργήθηκε το ObjectID. Τέσσερα byte χωρούν τιμές από 0 έως 4.294.967.295, επομένως το πεδίο επανέρχεται στο 0 μετά τις 7 Φεβρουαρίου 2106, 06:28:15 UTC.
  • Τυχαία τιμή (5 byte). Ένας αριθμός που επιλέγεται τυχαία μία φορά, όταν ξεκινά ένα πρόγραμμα. Κάθε ObjectID που δημιουργεί στη συνέχεια το πρόγραμμα επαναχρησιμοποιεί την ίδια τυχαία τιμή, επομένως διαφορετικοί υπολογιστές δεν χρειάζεται να συντονίζονται.
  • Μετρητής (3 byte). Ένας αριθμός που ξεκινά από τυχαίο σημείο μεταξύ 0 και 16.777.215 και αυξάνεται κατά 1 για κάθε νέο ObjectID. Αν ξεπεράσει το 16.777.215, επανέρχεται στο 0.

Τοποθετημένα το ένα μετά το άλλο, τα μέρη έχουν την εξής μορφή:

1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2

Οι παλαιότεροι οδηγοί MongoDB κατασκεύαζαν το μεσαίο τμήμα από ένα αναγνωριστικό μηχανήματος και ένα αναγνωριστικό διεργασίας, αντί για έναν τυχαίο αριθμό. Οι τρέχοντες οδηγοί, συμπεριλαμβανομένης της λογικής πίσω από αυτό το εργαλείο, χρησιμοποιούν αντί γι’ αυτό μία τυχαία τιμή 5 byte ανά διεργασία.

Μορφή και τύπος MongoDB ObjectID

Δεν υπάρχει αριθμητικός τύπος πίσω από ένα ObjectID, σε αντίθεση με έναν υπολογισμό ποσοστού ή τόκου. Κατασκευάζεται μετατρέποντας τρεις αριθμούς σε δεκαεξαδικό κείμενο και ενώνοντας τα αποτελέσματα διαδοχικά:

  1. Πάρτε τον τρέχοντα χρόνο σε δευτερόλεπτα από την εποχή Unix, περιορισμένο στο εύρος 0 έως 4.294.967.295 ώστε να χωρά σε τέσσερα byte. Γράψτε τον ως δεκαεξαδικό αριθμό 8 ψηφίων.
  2. Πάρτε τη σταθερή τυχαία τιμή της διεργασίας, έναν αριθμό από 0 έως 2^40 − 1. Γράψτε τον ως δεκαεξαδικό αριθμό 10 ψηφίων.
  3. Πάρτε την τρέχουσα τιμή του μετρητή, από 0 έως 16.777.215. Γράψτε την ως δεκαεξαδικό αριθμό 6 ψηφίων και, στη συνέχεια, αυξήστε τον μετρητή κατά 1 για το επόμενο ID.
  4. Ενώστε τις τρεις δεκαεξαδικές συμβολοσειρές, με αυτή τη σειρά, σε μία συμβολοσειρά 24 χαρακτήρων.

Λυμένο παράδειγμα

Ας υποθέσουμε ότι ένα πρόγραμμα ξεκινά στη χρονική στιγμή Unix 1.700.000.000 δευτερολέπτων, δηλαδή στις 14 Νοεμβρίου 2023, 22:13:20 UTC. Επιλέγει την τυχαία τιμή 3f2a91c8d4 και ξεκινά τον μετρητή του από 12.345.

  • Χρονοσφραγίδα σε δεκαεξαδική μορφή: 6553f100
  • Τυχαία τιμή σε δεκαεξαδική μορφή: 3f2a91c8d4
  • Μετρητής σε δεκαεξαδική μορφή: 003039

Η ένωση αυτών δίνει το πρώτο ObjectID:

6553f1003f2a91c8d4003039

Αν το πρόγραμμα δημιουργήσει ένα δεύτερο ObjectID στο ίδιο δευτερόλεπτο, η χρονοσφραγίδα και η τυχαία τιμή παραμένουν ίδιες, αλλά ο μετρητής αυξάνεται σε 12.346 (00303a):

6553f1003f2a91c8d400303a

Η ανάγνωση ενός ObjectID λειτουργεί και αντίστροφα. Με δεδομένο το 507f1f77bcf86cd799439011, οι πρώτοι 8 χαρακτήρες του, 507f1f77, αποκωδικοποιούνται σε 1.350.508.407 δευτερόλεπτα από την εποχή, δηλαδή στις 17 Οκτωβρίου 2012, 21:13:27 UTC.

Συνήθεις χρήσεις των MongoDB ObjectID

  • Πρωτεύοντα κλειδιά. Το MongoDB τοποθετεί αυτόματα ένα ObjectID στο πεδίο _id ενός εγγράφου, εκτός αν δοθεί διαφορετική τιμή.
  • Αναζήτηση βάσει χρόνου δημιουργίας. Επειδή η χρονοσφραγίδα είναι ενσωματωμένη, ένα πρόγραμμα μπορεί να διαβάσει τον κατά προσέγγιση χρόνο δημιουργίας ενός εγγράφου χωρίς ξεχωριστό πεδίο ημερομηνίας.
  • Ταξινόμηση κατά σειρά εισαγωγής. Η ταξινόμηση των εγγράφων κατά _id τα ταξινομεί κατά προσέγγιση με βάση τον χρόνο δημιουργίας, επειδή η χρονοσφραγίδα εμφανίζεται πρώτη στην τιμή.
  • Δεδομένα δοκιμών και εικονικά δεδομένα. Οι προγραμματιστές χρησιμοποιούν παραγόμενα ObjectID για τη δημιουργία δειγματικών εγγράφων ή αυτοματοποιημένων δοκιμών χωρίς να εκτελούν βάση δεδομένων.

MongoDB ObjectID έναντι UUID

Ένα UUID (Καθολικά μοναδικό αναγνωριστικό) είναι μια τιμή 16 byte, δηλαδή τέσσερα byte μεγαλύτερη από ένα ObjectID. Ένα τυπικό UUID είναι συνήθως εξ ολοκλήρου τυχαίο, επομένως δεν αποκαλύπτει τον χρόνο δημιουργίας ούτε ταξινομείται με βάση τη σειρά δημιουργίας. Ένα ObjectID είναι μικρότερο και έχει κατά προσέγγιση χρονική σειρά, γεγονός που αποτελεί έναν από τους λόγους για τους οποίους το MongoDB το χρησιμοποιεί από προεπιλογή, αν και δεν παρέχει την ίδια τυπική εγγύηση μοναδικότητας με ένα σωστά παραγόμενο UUID.

Συχνές ερωτήσεις

Σε τι χρησιμεύει ένα MongoDB ObjectID; Είναι η προεπιλεγμένη τιμή που το MongoDB τοποθετεί στο πεδίο _id ενός εγγράφου, ώστε κάθε έγγραφο να αποκτά ένα μοναδικό κλειδί χωρίς πρόσθετη ρύθμιση.

Είναι εγγυημένα μοναδικά τα MongoDB ObjectID; Όχι με τυπική, μαθηματική έννοια, αλλά οι συγκρούσεις είναι εξαιρετικά απίθανες. Δύο ObjectID θα έπρεπε να έχουν την ίδια τυχαία τιμή και την ίδια θέση μετρητή στο ίδιο δευτερόλεπτο, κάτι που κανονικά συμβαίνει μόνο μέσα σε μία διεργασία.

Μπορεί να διαβαστεί η ημερομηνία δημιουργίας από ένα ObjectID; Ναι. Οι πρώτοι 8 δεκαεξαδικοί χαρακτήρες, δηλαδή 4 byte, περιέχουν τον αριθμό των δευτερολέπτων από την εποχή Unix. Η μετατροπή αυτού του αριθμού σε ημερομηνία δίνει τον κατά προσέγγιση χρόνο δημιουργίας.

Πόσα ObjectID μπορεί να δημιουργήσει αυτό το εργαλείο κάθε φορά; Από 1 έως 100 ανά παρτίδα. Κάθε ID μιας παρτίδας μοιράζεται την ίδια τυχαία τιμή σε επίπεδο διεργασίας και έχει μετρητή κατά ένα μεγαλύτερο από το προηγούμενο.

Μπορούν να χρησιμοποιηθούν MongoDB ObjectID εκτός MongoDB; Ναι. Επειδή είναι απλώς τιμές 12 byte κωδικοποιημένες ως δεκαεξαδικό κείμενο, λειτουργούν και ως μοναδικά ID σε άλλα συστήματα, αν και το σχήμα ID μιας βάσης δεδομένων μπορεί να ταιριάζει καλύτερα στις ανάγκες της.

Συνδέεται αυτό το εργαλείο με πραγματική βάση δεδομένων MongoDB; Όχι. Εκτελείται εξ ολοκλήρου στο πρόγραμμα περιήγησης και δεν διαβάζει ούτε γράφει σε καμία βάση δεδομένων.

Παραπομπές

  1. "ObjectId." Εγχειρίδιο MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Προδιαγραφές MongoDB BSON, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Προδιαγραφή BSON, https://bsonspec.org/spec.html.