UUID (Καθολικά μοναδικοί εντολές αναγνωριστικού) είναι τιμές 128-bit που χρησιμοποιούνται σε βάσεις δεδομένων, μεταξύ άλλων, για τον μοναδικό προσδιορισμό καταχωρήσεων πίνακα. Αντιπροσωπεύονται ως δεκαεξαδική συμβολοσειρά χωρισμένη σε πέντε ομάδες που χωρίζονται με παύλες (Παράδειγμα: 09fe49b3-4d2b-471c-ac04-36c9e706b85f
). Υπάρχει πολυάριθμος Συζητήσεις σχετικά με τα πλεονεκτήματα και τα μειονεκτήματα των UUID σε βάσεις δεδομένων - είναι απαραίτητα σε κατανεμημένα συστήματα.
Ως εκ τούτου, σε μικροϋπηρεσίες και εφαρμογές πολλαπλών μισθώσεων, αξίζει να εξεταστεί το ενδεχόμενο εισαγωγής UUID. Η εναλλαγή από τον τύπο δεδομένων BigInteger σε UUID (μια παραλλαγή της έκδοσης 4 με δυνατότητα ταξινόμησης UUID από την προδιαγραφή RFC 4122 ) στο πλαίσιο PHP Laravel γίνεται γρήγορα: Αρχικά, δημιουργούμε ένα νέο χαρακτηριστικό:
2aa7136d977617159be1834eaf40e871
Στη συνέχεια προσθέτουμε όλα τα μοντέλα μας:
2aa7136d977617159be1834eaf40e871
Στο Laravel 9⁺ αυτό είναι ακόμα πιο εύκολο: εδώ έχουμε ήδη το χαρακτηριστικό HasUuids έτοιμο για χρήση. Εναλλακτικά, το πλαίσιο προσφέρει επίσης υποστήριξη για τον σχετικό, αλλά ακόμα μάλλον άγνωστο τύπο δεδομένων ULID , ο οποίος θα μπορούσε να είναι ενδιαφέρον λόγω της καλύτερης αναγνωσιμότητας και ταξινόμησης.
Το δύσκολο κομμάτι είναι η μετάβαση των υπαρχόντων δεδομένων. Χονδρικά θα μπορούσε κανείς να προχωρήσει ως εξής:
- Προσθέστε νέες στήλες UUID με κενές τιμές σε όλους τους πίνακες
(το καθένα βασίζεται σε όλες τις στήλες πρωτεύοντος και ξένου κλειδιού) - Γράψτε τις τιμές UUID στις νέες στήλες
(με αύξοντα πρωτεύοντα κλειδιά συν ενημερωμένα ξένα κλειδιά) - Διαγραφή αρχικών στηλών
- Μετονομασία νέων στηλών
Υπάρχουν πολλές προκλήσεις εδώ: Η διαδικασία μετεγκατάστασης διαρκεί πολύ και νέες στήλες προστίθενται στο τέλος του πίνακα (πιθανή λύση: στήλες θέρετρων ). Ένας πολύ πιο άμεσος τρόπος είναι να μετασχηματίσετε τις στήλες απευθείας.
Αν βάλεις αυτό PostgreSQL ένα, μπορείτε (μετά από προηγούμενο αντίγραφο ασφαλείας, φυσικά) να εκτελέσετε το ακόλουθο ερώτημα, για παράδειγμα (πριν από αυτό μπορείτε να διαγράψετε όλους τους πίνακες που εξαιρείτε στο Z. 19
/31
αντικαταστήστε, καθώς και δικούς σας ειδικούς κανόνες στο Z. 37
/39
add) και αντιγράφει όλα τα ερωτήματα που δημιουργούνται από αυτό:
2aa7136d977617159be1834eaf40e871
Εάν τώρα εκτελείτε τα ερωτήματα που δημιουργούνται μαζί, έχετε μετεγκαταστήσει τη βάση δεδομένων σε σύντομο χρονικό διάστημα. Ενώ τα UUID που δημιουργούνται με αυτόν τον τρόπο δεν συμμορφώνονται με την προδιαγραφή v4, είναι λεξιγραφικά με την ίδια σειρά με τις προηγούμενες καταχωρήσεις, δεν συγκρούονται με νέα UUID (στην 3η ομάδα στο v4 υπάρχει πάντα ένα 4
, πάντα ένα στη μεταναστευμένη παραλλαγή 0
), που σημαίνει επίσης ότι τα νέα UUID είναι πάντα μεγαλύτερα από τα UUID που έχουν μετεγκατασταθεί.
Μετά από αυτό, συνιστάται να διαγράψετε όλες τις κρυφές μνήμες Laravel (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*
) και τρέχουσες συνεδρίες (rm -f storage/framework/sessions/*
) να αδειάσω. Φυσικά, το όλο θέμα μπορεί επίσης να εφαρμοστεί σε μια μετανάστευση Laravel:
2aa7136d977617159be1834eaf40e871
Μετά τη μετατροπή, κάποιος χρησιμοποιεί σε μελλοντικές μετεγκαταστάσεις bigIncrements
ή. bigInteger
έπειτα uuid
:
2aa7136d977617159be1834eaf40e871