portaldacalheta.pt
  • Κύριος
  • Κατανεμημένες Ομάδες
  • Τροποσ Ζωησ
  • Αλλα
  • Κερδοφορία & Αποδοτικότητα
Επιστήμη Δεδομένων Και Βάσεις Δεδομένων

Μετεγκαταστάσεις βάσης δεδομένων: Μετατροπή των κάμπιων σε πεταλούδες



Οι χρήστες δεν ενδιαφέρονται για το περιεχόμενο του λογισμικού που χρησιμοποιούν. απλώς ότι λειτουργεί ομαλά, με ασφάλεια και διακριτικά. Οι προγραμματιστές προσπαθούν να το κάνουν αυτό και ένα από τα προβλήματα που προσπαθούν να λύσουν είναι πώς να διασφαλίσουν ότι η αποθήκευση δεδομένων είναι σε κατάσταση κατάλληλη για την τρέχουσα έκδοση του προϊόντος. Το λογισμικό εξελίσσεται και το μοντέλο δεδομένων του μπορεί επίσης να αλλάξει με την πάροδο του χρόνου, π.χ. για διόρθωση λάθη σχεδιασμού . Για να περιπλέξετε περαιτέρω το ζήτημα, ενδέχεται να έχετε έναν αριθμό δοκιμαστικών περιβαλλόντων ή πελατών που μετεγκαθίστανται σε νεότερες εκδόσεις του προϊόντος με διαφορετικούς ρυθμούς. Δεν μπορείτε απλώς να τεκμηριώσετε τη δομή του καταστήματος και τους χειρισμούς που χρειάζεστε για να χρησιμοποιήσετε τη νέα γυαλιστερή έκδοση από μία οπτική γωνία.

Μετεγκαταστάσεις βάσης δεδομένων: Μετατροπή των κάμπιων σε πεταλούδες



Μπήκα κάποτε σε ένα έργο με μερικές βάσεις δεδομένων με δομές που ενημερώθηκαν κατ 'απαίτηση, απευθείας από προγραμματιστές. Αυτό σήμαινε ότι δεν υπήρχε προφανής τρόπος για να μάθετε ποιες αλλαγές χρειάζονταν να εφαρμοστούν για τη μετεγκατάσταση της δομής στην πιο πρόσφατη έκδοση και δεν υπήρχε καμία ιδέα εκδοχής! Αυτό ήταν κατά την περίοδο πριν από το DevOps και θα θεωρούσε ένα απόλυτο χάος στις μέρες μας. Αποφασίσαμε να αναπτύξουμε ένα εργαλείο που θα χρησιμοποιείται για την εφαρμογή κάθε αλλαγής στη δεδομένη βάση δεδομένων. Είχε μετεγκαταστάσεις και θα τεκμηριώσει τις αλλαγές σχήματος. Αυτό μας έκανε να είμαστε σίγουροι ότι δεν θα υπάρξουν τυχαίες αλλαγές και ότι η κατάσταση του σχήματος θα ήταν προβλέψιμη.



Σε αυτό το άρθρο, θα ρίξουμε μια ματιά στο πώς να εφαρμόσουμε σχεσιακές μετεγκαταστάσεις σχήματος βάσης δεδομένων και πώς να ξεπεράσουμε τα συναφή προβλήματα.



Πρώτα απ 'όλα, τι είναι οι μετεγκαταστάσεις βάσεων δεδομένων; Στο πλαίσιο αυτού του άρθρου, α μετανάστευση είναι ένα σύνολο αλλαγών που πρέπει να εφαρμοστούν σε μια βάση δεδομένων. Η δημιουργία ή απόθεση πίνακα, στήλης ή ευρετηρίου είναι κοινά παραδείγματα μετεγκαταστάσεων. Το σχήμα του σχήματος μπορεί να αλλάξει δραματικά με την πάροδο του χρόνου, ειδικά εάν η ανάπτυξη ξεκίνησε όταν οι απαιτήσεις ήταν ακόμη ασαφείς. Έτσι, κατά τη διάρκεια πολλών ορόσημων στο δρόμο για μια κυκλοφορία, το μοντέλο δεδομένων σας θα έχει εξελιχθεί και μπορεί να έχει γίνει εντελώς διαφορετικό από αυτό που ήταν στην αρχή. Οι μετεγκαταστάσεις είναι μόνο βήματα προς την κατάσταση προορισμού.

σε ποια γλώσσα είναι γραμμένο το c

Για να ξεκινήσετε, ας εξερευνήσουμε τι έχουμε στην εργαλειοθήκη μας για να αποφύγουμε να ανακαλύψουμε εκ νέου αυτό που έχει ήδη γίνει καλά.



Εργαλεία

Σε κάθε ευρέως χρησιμοποιούμενη γλώσσα, υπάρχουν βιβλιοθήκες που διευκολύνουν την εύκολη μετεγκατάσταση βάσεων δεδομένων. Για παράδειγμα, στην περίπτωση της Java, οι δημοφιλείς επιλογές είναι Liquibase και Flyway . Θα χρησιμοποιήσουμε περισσότερο το Liquibase σε παραδείγματα, αλλά οι έννοιες ισχύουν για άλλες λύσεις και δεν συνδέονται με το Liquibase.

Γιατί να ενοχλείτε τη χρήση μιας ξεχωριστής βιβλιοθήκης μετεγκατάστασης σχήματος εάν ορισμένα ORM παρέχουν ήδη την επιλογή αναβάθμισης ενός σχήματος αυτόματα και να το κάνουν να ταιριάζει με τη δομή των αντιστοιχισμένων τάξεων; Στην πράξη, τέτοιες αυτόματες μετακινήσεις κάνουν απλές αλλαγές σχήματος, π.χ. δημιουργία πινάκων και στηλών και δεν μπορούν να κάνουν δυνητικά καταστροφικά πράγματα όπως πτώση ή μετονομασία αντικειμένων βάσης δεδομένων. Επομένως, οι μη αυτόματες (αλλά ακόμα αυτοματοποιημένες) λύσεις είναι συνήθως μια καλύτερη επιλογή επειδή είστε υποχρεωμένοι να περιγράψετε μόνοι σας τη λογική μετεγκατάστασης και γνωρίζετε τι ακριβώς πρόκειται να συμβεί στη βάση δεδομένων σας.



Είναι επίσης πολύ κακή ιδέα να συνδυάσετε αυτόματες και μη αυτόματες τροποποιήσεις σχήματος, επειδή μπορεί να δημιουργήσετε μοναδικά και απρόβλεπτα σχήματα εάν οι χειροκίνητες αλλαγές εφαρμόζονται με λάθος σειρά ή δεν εφαρμόζονται καθόλου, ακόμη και αν απαιτούνται. Μόλις επιλεγεί το εργαλείο, χρησιμοποιήστε το για να εφαρμόσετε όλες τις μετεγκαταστάσεις σχήματος.

Τυπικές μετεγκαταστάσεις βάσεων δεδομένων

Οι τυπικές μετεγκαταστάσεις περιλαμβάνουν τη δημιουργία ακολουθιών, πινάκων, στηλών, κύριων και ξένων κλειδιών, ευρετηρίων και άλλων αντικειμένων βάσης δεδομένων. Για τους πιο συνηθισμένους τύπους αλλαγών, το Liquibase παρέχει ξεχωριστά δηλωτικά στοιχεία για την περιγραφή του τι πρέπει να γίνει. Θα ήταν πολύ βαρετό να διαβάσετε για κάθε ασήμαντη αλλαγή που υποστηρίζεται από το Liquibase ή άλλα παρόμοια εργαλεία. Για να πάρετε μια ιδέα για το πώς φαίνεται το σύνολο αλλαγών, εξετάστε το ακόλουθο παράδειγμα όπου δημιουργούμε έναν πίνακα (οι δηλώσεις χώρου ονομάτων XML παραλείπονται για συντομία):



createTable

Όπως μπορείτε να δείτε, το changelog είναι ένα σύνολο από ομάδες αλλαγών και τα σετ αλλαγών αποτελούνται από αλλαγές. Απλές αλλαγές όπως UPDATE product SET code = 'new_' || code μπορούν να συνδυαστούν για την εφαρμογή πιο περίπλοκων μεταναστεύσεων. π.χ., ας υποθέσουμε ότι πρέπει να ενημερώσετε τον κωδικό προϊόντος για όλα τα προϊόντα. Μπορεί εύκολα να επιτευχθεί με την ακόλουθη αλλαγή:

createTable

Η απόδοση θα μειωθεί αν έχετε ζιλόνια προϊόντων. Για να επιταχύνετε τη μετεγκατάσταση, μπορούμε να την ξαναγράψουμε στα ακόλουθα βήματα:



  1. Δημιουργήστε έναν νέο πίνακα για προϊόντα με PRODUCT_TMP, όπως είδαμε νωρίτερα. Σε αυτό το στάδιο, είναι καλύτερο να δημιουργήσετε όσο το δυνατόν λιγότερους περιορισμούς. Ας ονομάσουμε τον νέο πίνακα PRODUCT_TMP.
  2. Συμπληρώστε INSERT INTO ... SELECT ... με SQL με τη μορφή sql χρησιμοποιώντας addNotNullConstraint αλλαγή.
  3. Δημιουργήστε όλους τους περιορισμούς (addUniqueConstraint, addForeignKeyConstraint, createIndex) και ευρετήρια (PRODUCT) που χρειάζεστε.
  4. Μετονομάστε το PRODUCT_BAK τραπέζι σε κάτι σαν renameTable. Το Liquibase μπορεί να το κάνει με PRODUCT_TMP.
  5. Μετονομασία PRODUCT έως renameTable (και πάλι, χρησιμοποιώντας PRODUCT_BAK).
  6. Προαιρετικά, αφαιρέστε dropTable με ... .

Φυσικά, είναι καλύτερο να αποφύγετε τέτοιες μεταναστεύσεις, αλλά είναι καλό να γνωρίζετε πώς να τις εφαρμόσετε σε περίπτωση που αντιμετωπίσετε μία από αυτές τις σπάνιες περιπτώσεις όπου τη χρειάζεστε.

Εάν θεωρείτε ότι τα XML, JSON ή YAML είναι πολύ παράξενα για την περιγραφή των αλλαγών, τότε απλά χρησιμοποιήστε απλή SQL και χρησιμοποιήστε όλες τις λειτουργίες που αφορούν συγκεκριμένους προμηθευτές βάσης δεδομένων. Επίσης, μπορείτε να εφαρμόσετε οποιαδήποτε προσαρμοσμένη λογική σε απλή Java.



Ο τρόπος με τον οποίο η Liquibase σάς απαλλάσσει από τη σύνταξη πραγματικής συγκεκριμένης βάσης δεδομένων SQL μπορεί να οδηγήσει σε υπερβολική εμπιστοσύνη, αλλά δεν πρέπει να ξεχάσετε τις ιδιαιτερότητες της βάσης δεδομένων-στόχου σας. π.χ., όταν δημιουργείτε ένα ξένο κλειδί, ένα ευρετήριο μπορεί να δημιουργηθεί ή όχι, ανάλογα με το συγκεκριμένο σύστημα διαχείρισης βάσεων δεδομένων που χρησιμοποιείται. Ως αποτέλεσμα, μπορεί να βρεθείτε σε μια δύσκολη κατάσταση. Το Liquibase σας επιτρέπει να καθορίσετε ότι ένα σύνολο αλλαγών πρέπει να εκτελείται μόνο για έναν συγκεκριμένο τύπο βάσης δεδομένων, π.χ. PostgreSQL, Oracle ή MySQL. Αυτό καθιστά δυνατή τη χρήση των ίδιων προμηθευτών-αγνωστικών αλλαγών για διαφορετικές βάσεις δεδομένων και για άλλες ομάδες αλλαγών, χρησιμοποιώντας σύνταξη και λειτουργίες ειδικά για προμηθευτές. Το ακόλουθο σύνολο αλλαγών θα εκτελεστεί μόνο εάν χρησιμοποιείτε μια βάση δεδομένων Oracle:

IDX__

Εκτός από το Oracle, το Liquibase υποστηρίζει μερικούς άλλες βάσεις δεδομένων έξω από το κουτί.

Ονομασία αντικειμένων βάσης δεδομένων

Κάθε αντικείμενο βάσης δεδομένων που δημιουργείτε πρέπει να ονομάζεται. Δεν απαιτείται να δώσετε ρητά ένα όνομα για ορισμένους τύπους αντικειμένων, π.χ. για περιορισμούς και ευρετήρια. Αλλά δεν σημαίνει ότι αυτά τα αντικείμενα δεν θα έχουν ονόματα. Τα ονόματά τους θα δημιουργηθούν ούτως ή άλλως από τη βάση δεδομένων. Το πρόβλημα προκύπτει όταν πρέπει να αναφέρετε αυτό το αντικείμενο για να το αφήσετε ή να το αλλάξετε. Επομένως, είναι καλύτερα να τους δώσετε ρητά ονόματα. Υπάρχουν όμως κανόνες σχετικά με τα ονόματα που πρέπει να δώσετε; Η απάντηση είναι σύντομη: Να είστε συνεπείς. π.χ., εάν αποφασίσατε να ονομάσετε ευρετήρια ως εξής: CODE, τότε ένα ευρετήριο για τα προαναφερθέντα IDX_PRODUCT_CODE η στήλη πρέπει να ονομάζεται DATABASECHANGELOG.

Οι συμβάσεις ονομασίας είναι απίστευτα αμφιλεγόμενες, επομένως δεν θα υποθέσουμε ότι θα δώσουμε αναλυτικές οδηγίες εδώ. Να είστε συνεπείς, σεβαστείτε τις συμβάσεις της ομάδας ή του έργου σας, ή απλώς εφευρέστε τις εάν δεν υπάρχουν.

Οργάνωση αλλαγών

Το πρώτο πράγμα που πρέπει να αποφασίσετε είναι το πού θα αποθηκεύσετε τα αλλαντικά. Υπάρχουν βασικά δύο προσεγγίσεις:

  1. Διατηρήστε ταetsets με τον κωδικό εφαρμογής. Είναι βολικό να το κάνετε, επειδή μπορείτε να δεσμεύσετε και να ελέγξετε από κοινού τα προγράμματα αλλαγής και τον κωδικό εφαρμογής.
  2. Διατηρήστε ξεχωριστά τα σετ αλλαγών και τον κωδικό εφαρμογής , π.χ., σε ξεχωριστά αποθετήρια VCS. Αυτή η προσέγγιση είναι κατάλληλη όταν το μοντέλο δεδομένων μοιράζεται σε πολλές εφαρμογές και είναι πιο βολικό να αποθηκεύετε όλα τα σύνολα αλλαγών σε ένα ειδικό αποθετήριο και να μην τα διασκορπίζετε σε πολλά αποθετήρια όπου ζει ο κωδικός εφαρμογής.

Όπου κι αν αποθηκεύσετε τα αλλαντικά, είναι γενικά λογικό να τα χωρίσετε στις ακόλουθες κατηγορίες:

  1. Ανεξάρτητες μετεγκαταστάσεις που δεν επηρεάζουν το τρέχον σύστημα. Συνήθως είναι ασφαλές να δημιουργείτε νέους πίνακες, ακολουθίες κ.λπ., εάν η τρέχουσα εφαρμοζόμενη εφαρμογή δεν τους γνωρίζει ακόμη.
  2. Τροποποιήσεις σχήματος που αλλάζουν τη δομή του καταστήματος , π.χ., προσθήκη ή απόθεση στηλών και ευρετηρίων. Αυτές οι αλλαγές δεν πρέπει να εφαρμόζονται ενώ μια παλαιότερη έκδοση της εφαρμογής εξακολουθεί να χρησιμοποιείται, διότι κάτι τέτοιο μπορεί να οδηγήσει σε κλειδώματα ή περίεργη συμπεριφορά λόγω αλλαγών στο σχήμα.
  3. Γρήγορες μετεγκαταστάσεις που εισάγουν ή ενημερώνουν μικρές ποσότητες δεδομένων. Εάν αναπτύσσονται πολλές εφαρμογές, μπορούν να εκτελεστούν ταυτόχρονα αλλαγές από αυτήν την κατηγορία χωρίς να υποβαθμιστεί η απόδοση της βάσης δεδομένων.
  4. Πιθανώς αργές μετεγκαταστάσεις που εισάγουν ή ενημερώνουν πολλά δεδομένα. Αυτές οι αλλαγές είναι καλύτερα να εφαρμοστούν όταν δεν εκτελούνται άλλες παρόμοιες μετεγκαταστάσεις.

γραφική αναπαράσταση των τεσσάρων κατηγοριών

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

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

Όποιο στάδιο και αν είναι επιλεγμένο για την εφαρμογή μετεγκαταστάσεων, αξίζει να σημειωθεί ότι η χρήση της ίδιας βάσης δεδομένων για πολλές εφαρμογές ενδέχεται να προκαλέσει κλειδώματα κατά την εφαρμογή μετεγκατάστασης. Το Liquibase (όπως πολλές άλλες παρόμοιες λύσεις) χρησιμοποιεί δύο ειδικούς πίνακες για την καταγραφή των μεταδεδομένων του: DATABASECHANGELOGLOCK και runOnChange='true'. Το πρώτο χρησιμοποιείται για την αποθήκευση πληροφοριών σχετικά με τα εφαρμοσμένα σετ αλλαγών και το δεύτερο για την αποφυγή ταυτόχρονης μετεγκατάστασης στο ίδιο σχήμα βάσης δεδομένων. Έτσι, εάν πολλές εφαρμογές πρέπει να χρησιμοποιούν το ίδιο σχήμα βάσης δεδομένων για κάποιο λόγο, είναι προτιμότερο να χρησιμοποιείτε μη προεπιλεγμένα ονόματα για πίνακες μεταδεδομένων για να αποφύγετε τις κλειδαριές.

Τώρα που η δομή υψηλού επιπέδου είναι ξεκάθαρη, πρέπει να αποφασίσετε πώς να οργανώσετε το σύνολο αλλαγών σε κάθε κατηγορία.

δείγμα οργανισμού αλλαγών

Εξαρτάται σε μεγάλο βαθμό από συγκεκριμένες απαιτήσεις εφαρμογής, αλλά τα ακόλουθα σημεία είναι συνήθως λογικά:

  1. Διατηρήστε τα changelogs ομαδοποιημένα κατά κυκλοφορίες του προϊόντος σας. Δημιουργήστε έναν νέο κατάλογο για κάθε έκδοση και τοποθετήστε τα αντίστοιχα αρχεία changelog σε αυτό. Έχετε ένα ριζικό changelog και περιλαμβάνω changelogs που αντιστοιχούν σε κυκλοφορίες. Στα changelog κυκλοφορίας, συμπεριλάβετε και άλλα changelogs που περιλαμβάνουν αυτήν την έκδοση.
  2. Έχετε μια σύμβαση ονομασίας για αρχεία changelog και αναγνωριστικά αλλαγών - και ακολουθήστε φυσικά.
  3. Αποφύγετε τις αλλαγές σετ με πολλές αλλαγές. Προτιμήστε πολλά σετ αλλαγών σε ένα μόνο μακρύ σύνολο αλλαγών.
  4. Εάν χρησιμοποιείτε αποθηκευμένες διαδικασίες και θέλετε να τις ενημερώσετε, σκεφτείτε να χρησιμοποιήσετε το createTable χαρακτηριστικό του Changeet στο οποίο προστίθεται αυτή η αποθηκευμένη διαδικασία. Διαφορετικά, κάθε φορά που ενημερώνεται, θα πρέπει να δημιουργείτε ένα νέο σύνολο αλλαγών με μια νέα έκδοση της αποθηκευμένης διαδικασίας. Οι απαιτήσεις ποικίλλουν, αλλά είναι συχνά αποδεκτό να μην παρακολουθείτε τέτοιο ιστορικό.
  5. Εξετάστε το ενδεχόμενο συμπίεσης περιττών αλλαγών προτού συγχωνεύσετε κλάδους λειτουργιών. Μερικές φορές, συμβαίνει ότι σε έναν κλάδο χαρακτηριστικών (ειδικά σε έναν μακροχρόνιο), αργότερα οι αλλαγές τροποποιούν τις αλλαγές που έγιναν σε προηγούμενες αλλαγές. Για παράδειγμα, μπορείτε να δημιουργήσετε έναν πίνακα και στη συνέχεια να αποφασίσετε να προσθέσετε περισσότερες στήλες σε αυτόν. Αξίζει να προσθέσετε αυτές τις στήλες στην αρχική context='test' αλλάξτε εάν αυτός ο κλάδος χαρακτηριστικών δεν έχει συγχωνευτεί ακόμα στον κύριο κλάδο.
  6. Χρησιμοποιήστε τα ίδια changelogs για να δημιουργήσετε μια δοκιμαστική βάση δεδομένων. Εάν προσπαθήσετε να το κάνετε αυτό, ενδέχεται σύντομα να ανακαλύψετε ότι δεν ισχύει κάθε σύνολο αλλαγών στο περιβάλλον δοκιμής ή ότι απαιτούνται επιπλέον ομάδες αλλαγών για αυτό το συγκεκριμένο περιβάλλον δοκιμής. Με το Liquibase, αυτό το πρόβλημα επιλύεται εύκολα με τη χρήση πλαίσια . Απλώς προσθέστε το test χαρακτηριστικό στα μεταβαλλόμενα σύνολα που πρέπει να εκτελεστούν μόνο με δοκιμές και, στη συνέχεια, αρχικοποίηση του Liquibase με το rollback ενεργοποιημένο πλαίσιο.

Επιστροφή

Όπως και άλλες παρόμοιες λύσεις, το Liquibase υποστηρίζει το σχήμα μετεγκατάστασης «πάνω» και «κάτω». Προσοχή όμως: Η αναίρεση των μεταναστεύσεων μπορεί να μην είναι εύκολη και δεν αξίζει πάντα τον κόπο. Εάν αποφασίσατε να υποστηρίξετε την αναίρεση μετεγκαταστάσεων για την εφαρμογή σας, τότε πρέπει να είστε συνεπείς και να το κάνετε για κάθε σύνολο αλλαγών που θα πρέπει να αναιρεθεί. Με το Liquibase, η αναίρεση ενός σετ αλλαγών πραγματοποιείται με την προσθήκη ενός createTable ετικέτα που περιέχει αλλαγές που απαιτούνται για την εκτέλεση επαναφοράς. Εξετάστε το ακόλουθο παράδειγμα:

addColumn

Η ρητή επαναφορά είναι περιττή εδώ, επειδή η Liquibase θα εκτελούσε τις ίδιες ενέργειες επαναφοράς. Η Liquibase μπορεί να επαναφέρει αυτόματα τους περισσότερους από τους υποστηριζόμενους τύπους αλλαγών, π.χ. createIndex, DATABASECHANGELOG ή DATABASECHANGELOG.

Διορθώνοντας το παρελθόν

Κανείς δεν είναι τέλειος και όλοι κάνουμε λάθη. Μερικά από αυτά μπορεί να ανακαλυφθούν πολύ αργά όταν έχουν ήδη εφαρμοστεί αλλοιώσεις. Ας εξερευνήσουμε τι θα μπορούσε να γίνει για να σώσουμε την ημέρα.

Μη αυτόματη ενημέρωση της βάσης δεδομένων

Περιλαμβάνει μηνύματα με DATABASECHANGELOG και τη βάση δεδομένων σας με τους ακόλουθους τρόπους:

  1. Εάν θέλετε να διορθώσετε τις κακές αλλαγές και να τις εκτελέσετε ξανά:
    • Κατάργηση σειρών από MD5SUM που αντιστοιχούν στις αλλαγές.
    • Αφαιρέστε όλες τις ανεπιθύμητες ενέργειες που εισήχθησαν από τα Changeets. π.χ., επαναφέρετε έναν πίνακα εάν είχε πέσει.
    • Διορθώστε τις κακές αλλαγές στο σύνολο.
    • Εκτελέστε ξανά τις μετεγκαταστάσεις.
  2. Εάν θέλετε να διορθώσετε τις κακές αλλαγές, αλλά παραλείψτε να τις εφαρμόσετε ξανά:
    • Ενημέρωση NULL ορίζοντας το MD5SUM τιμή πεδίου σε runOnChange='true' για εκείνες τις σειρές που αντιστοιχούν στις κακές αλλαγές.
    • Διορθώστε με μη αυτόματο τρόπο τι έγινε λάθος στη βάση δεδομένων. Για παράδειγμα, εάν είχε προστεθεί μια στήλη με λάθος τύπο, εκδώστε ένα ερώτημα για να τροποποιήσετε τον τύπο του.
    • Διορθώστε τις κακές αλλαγές στο σύνολο.
    • Εκτελέστε ξανά τις μετεγκαταστάσεις. Το Liquibase θα υπολογίσει το νέο checksum και θα το αποθηκεύσει στο context. Τα διορθωμένα σετ αλλαγών δεν θα εκτελεστούν ξανά.

Προφανώς, είναι εύκολο να κάνετε αυτά τα κόλπα κατά τη διάρκεια της ανάπτυξης, αλλά γίνεται πολύ πιο δύσκολο εάν οι αλλαγές εφαρμόζονται σε πολλές βάσεις δεδομένων.

Γράψτε διορθωτικά Changesets

Στην πράξη, αυτή η προσέγγιση είναι συνήθως πιο κατάλληλη. Ίσως αναρωτιέστε, γιατί να μην επεξεργαστείτε μόνο το αρχικό σύνολο αλλαγών; Η αλήθεια είναι ότι εξαρτάται από το τι πρέπει να αλλάξει. Το Liquibase υπολογίζει ένα άθροισμα ελέγχου για κάθε σύνολο αλλαγών και αρνείται να εφαρμόσει νέες αλλαγές, εάν το άθροισμα ελέγχου είναι νέο για τουλάχιστον ένα από τα αλλαγμένα που εφαρμόστηκαν προηγουμένως. Αυτή η συμπεριφορά μπορεί να προσαρμοστεί σε βάση ανά αλλαγή, καθορίζοντας το runOnChange Χαρακτηριστικό. Το άθροισμα ελέγχου δεν επηρεάζεται εάν τροποποιήσετε προϋποθέσεις ή προαιρετικά χαρακτηριστικά του μεταβαλλόμενου συνόλου (context, context='graveyard-changesets-never-run', κ.λπ.).

Τώρα, μπορεί να αναρωτιέστε, πώς μπορείτε τελικά να διορθώσετε τις αλλαγές με λάθη;

  1. Αν θέλετε αυτές οι αλλαγές να εξακολουθούν να ισχύουν για νέα σχήματα, απλώς προσθέστε διορθωτικά σετ αλλαγών. Για παράδειγμα, εάν είχε προστεθεί μια στήλη με λάθος τύπο, τροποποιήστε τον τύπο της στο νέο σύνολο αλλαγών.
  2. Αν θέλετε να προσποιηθείτε ότι αυτά τα κακά μεταβλητά σύνολα δεν υπήρχαν ποτέ, κάντε τα εξής:
    • Αφαιρέστε τα σετ αλλαγών ή προσθέστε το changeSetExecuted χαρακτηριστικό με τιμή που εγγυάται ότι δεν θα προσπαθήσετε ποτέ να εφαρμόσετε ξανά μετεγκαταστάσεις με ένα τέτοιο περιβάλλον, π.χ.
      .
    • Προσθέστε νέα σετ αλλαγών που είτε θα επαναφέρουν αυτό που έγινε λάθος είτε θα το διορθώσουν. Αυτές οι αλλαγές θα πρέπει να εφαρμόζονται μόνο εάν εφαρμόστηκαν κακές αλλαγές. Μπορεί να επιτευχθεί με προϋποθέσεις, όπως με
      |_+_|
      . Μην ξεχάσετε να προσθέσετε ένα σχόλιο που να εξηγεί γιατί το κάνετε.
    • Προσθέστε νέες αλλαγές που τροποποιούν το σχήμα με τον σωστό τρόπο.

Όπως βλέπετε, η διόρθωση του παρελθόντος είναι δυνατή, αν και μπορεί να μην είναι πάντα απλή.

Μετριασμός των αυξανόμενων πόνων

Καθώς η εφαρμογή σας μεγαλώνει, το changelog της μεγαλώνει, συσσωρεύοντας κάθε αλλαγή σχήματος κατά μήκος της διαδρομής. Είναι από τη σχεδίαση και δεν υπάρχει τίποτα εγγενές λάθος με αυτό. Τα μακρά changelogs μπορούν να γίνουν πιο σύντομα με τακτική συμπίεση μετεγκαταστάσεων, π.χ., μετά την κυκλοφορία κάθε έκδοσης του προϊόντος. Σε ορισμένες περιπτώσεις, θα έκανε ταχύτερη την προετοιμασία του νέου σχήματος.

απεικόνιση των changelogs που συμπιέζονται

Η συμπίεση δεν είναι πάντα ασήμαντη και μπορεί να προκαλέσει παλινδρόμηση χωρίς να φέρει πολλά οφέλη. Μια άλλη εξαιρετική επιλογή είναι να χρησιμοποιήσετε μια βάση δεδομένων σπόρου για να αποφύγετε την εκτέλεση όλων των αλλαγών. Είναι κατάλληλο για δοκιμές σε περιβάλλοντα εάν πρέπει να έχετε έτοιμη μια βάση δεδομένων όσο το δυνατόν γρηγορότερα, ίσως ακόμη και με ορισμένα δεδομένα δοκιμών. Μπορεί να το θεωρήσετε ως μια μορφή συμπίεσης για τα αλλαντικά: Σε κάποιο σημείο (π.χ. μετά την κυκλοφορία μιας άλλης έκδοσης), κάνετε μια απόρριψη του σχήματος. Αφού επαναφέρετε την απόρριψη, εφαρμόζετε μετεγκαταστάσεις ως συνήθως. Θα εφαρμοστούν μόνο νέες αλλαγές, επειδή οι παλαιότερες είχαν ήδη εφαρμοστεί πριν από την απόρριψη. Επομένως, αποκαταστάθηκαν από το χωματερή.

χακαρισμένοι αριθμοί χρεωστικών καρτών με cvv

απεικόνιση μιας βάσης δεδομένων σπόρων

συμπέρασμα

Αποφύγαμε σκόπιμα να βουτήξουμε βαθύτερα στις δυνατότητες του Liquibase για να παραδώσουμε ένα άρθρο που είναι σύντομο και στο σημείο, επικεντρωμένο στα εξελισσόμενα σχήματα γενικά. Ας ελπίσουμε ότι είναι σαφές ποια οφέλη και προβλήματα δημιουργούνται από την αυτοματοποιημένη εφαρμογή των μεταναστεύσεων σχήματος βάσης δεδομένων και πόσο καλά ταιριάζει όλα αυτά Πολιτισμός DevOps . Είναι σημαντικό να μην μετατρέψετε καν καλές ιδέες σε δόγμα. Οι απαιτήσεις ποικίλλουν και ως μηχανικοί βάσης δεδομένων , οι αποφάσεις μας πρέπει να ενθαρρύνουν την προώθηση ενός προϊόντος προς τα εμπρός και όχι απλώς να τηρούμε συστάσεις από κάποιον στο Διαδίκτυο.

Κατανόηση των βασικών

Ποια είναι η έννοια του σχήματος στη βάση δεδομένων;

Το σχήμα βάσης δεδομένων περιγράφει τον τρόπο οργάνωσης των δεδομένων μέσα στη βάση δεδομένων.

Ποια είναι η διαφορά μεταξύ μιας βάσης δεδομένων και ενός σχήματος;

Ένα σχήμα είναι μέρος μιας βάσης δεδομένων. Η βάση δεδομένων αποτελείται συνήθως από ένα ή περισσότερα σχήματα. Επίσης, είναι πολύ κοινό να καλείτε ένα DBMS μια βάση δεδομένων. Συνήθως είναι σαφές από το πλαίσιο εάν μιλάμε για το κοντέινερ δεδομένων ή για το σύστημα που διαχειρίζεται αυτό το κοντέινερ.

Τι είναι ένα παράδειγμα σχήματος;

Εάν δημιουργείτε μια εφαρμογή διαχείρισης περιηγήσεων, το σχήμα βάσης δεδομένων θα περιέχει οντότητες όπως αεροπορική εταιρεία, πτήση ή πόλη. Εκτός από τα σχήματα που ορίζονται από το χρήστη, ένα DBMS έχει συνήθως ένα «σχήμα πληροφοριών» που μπορεί να χρησιμοποιηθεί για την αναζήτηση των ρυθμίσεων και των μεταδεδομένων.

Ποιοι είναι οι διαφορετικοί τύποι βάσεων δεδομένων;

Εκτός από τις σχεσιακές βάσεις δεδομένων, υπάρχουν αντικειμενικές, προσανατολισμένες σε έγγραφα και ιεραρχικές βάσεις δεδομένων.

Υπάρχει τρόπος να κάνετε το ερώτημα πιο γρήγορο;

Μπορείτε να βελτιστοποιήσετε ένα αργό ερώτημα αναδιαρθρώνοντάς το ή αλλάζοντας το σχήμα. Ένα DBMS συνήθως μπορεί να σας δώσει το σχέδιο εκτέλεσης και να σας βοηθήσει να μαντέψετε τι επιβραδύνει το ερώτημά σας (π.χ. μη χρήση ευρετηρίων ή επιλογή πάρα πολλών δεδομένων σε υποερωτήματα). Στη PostgreSQL, μπορείτε να χρησιμοποιήσετε το EXPLAIN ή EXPLAIN ANALYZE για να κατανοήσετε τι συμβαίνει.

Ποιο είναι το σχήμα στο PostgreSQL;

Στην PostgreSQL, ενδέχεται να έχετε πολλές βάσεις δεδομένων στο ίδιο σύμπλεγμα. το σχήμα είναι ένα δομικό στοιχείο της βάσης δεδομένων. Είναι το κοντέινερ για πίνακες, προβολές, διαδικασίες κ.λπ. Τα σχήματα μπορούν να θεωρηθούν κατάλογοι μέσα στη βάση δεδομένων, αλλά τα σχήματα δεν μπορούν να περιέχουν άλλα σχήματα.

4 Go Κριτικοί Γλωσσών

Πίσω Μέρος

4 Go Κριτικοί Γλωσσών
Μην κλιμακώσετε μια μη κερδοφόρα επιχείρηση: Γιατί η μονάδα Economics (Still) έχει σημασία

Μην κλιμακώσετε μια μη κερδοφόρα επιχείρηση: Γιατί η μονάδα Economics (Still) έχει σημασία

Διαδικασίες Χρηματοδότησης

Δημοφιλείς Αναρτήσεις
Πώς να δημιουργήσετε μια εφαρμογή επεξεργασίας φυσικής γλώσσας
Πώς να δημιουργήσετε μια εφαρμογή επεξεργασίας φυσικής γλώσσας
Πρόβλεψη επενδυτικού κεφαλαίου 2017: Σημάδια κόπωσης
Πρόβλεψη επενδυτικού κεφαλαίου 2017: Σημάδια κόπωσης
Μια βαθιά ματιά στο JSON εναντίον XML, Μέρος 2: Τα δυνατά σημεία και οι αδυναμίες και των δύο
Μια βαθιά ματιά στο JSON εναντίον XML, Μέρος 2: Τα δυνατά σημεία και οι αδυναμίες και των δύο
Πώς να ποσοτικοποιήσετε αποτελεσματικά την αξία προϊόντος - Ένας οδηγός για τους διαχειριστές προϊόντων
Πώς να ποσοτικοποιήσετε αποτελεσματικά την αξία προϊόντος - Ένας οδηγός για τους διαχειριστές προϊόντων
Το μέλλον των ομάδων: Διαχείριση του συνδυασμένου εργατικού δυναμικού
Το μέλλον των ομάδων: Διαχείριση του συνδυασμένου εργατικού δυναμικού
 
Think Business - Πώς να αυξήσετε την αξία του σχεδιαστή σας
Think Business - Πώς να αυξήσετε την αξία του σχεδιαστή σας
Εργονομία για Ψηφιακούς Νομάδες: Εργασία στο δρόμο χωρίς να σκοτωθείτε
Εργονομία για Ψηφιακούς Νομάδες: Εργασία στο δρόμο χωρίς να σκοτωθείτε
Μια βαθιά κατάδυση στις επενδύσεις του Elon Musk: The Makings of a Billionaire
Μια βαθιά κατάδυση στις επενδύσεις του Elon Musk: The Makings of a Billionaire
Αρχιτεκτονικοί Αλγόριθμοι Βελτιστοποίησης με HorusLP
Αρχιτεκτονικοί Αλγόριθμοι Βελτιστοποίησης με HorusLP
Κοιτάζοντας τα αποτυχημένα IPO στην εποχή του μονόκερου
Κοιτάζοντας τα αποτυχημένα IPO στην εποχή του μονόκερου
Δημοφιλείς Αναρτήσεις
  • μελλοντικές χρήσεις της εικονικής πραγματικότητας
  • οι σχεδιαστές διαφημίσεων χρησιμοποιούν την κίνηση για να
  • επιπτώσεις του χρώματος στους ανθρώπους
  • πώς να γράψετε ελεγχόμενο κώδικα
  • το πρωταρχικό νόημα του design στην τέχνη είναι να
  • φαίνεται ότι για την καλύτερη απόδοση θα μπορούσατε απλά να επιλέξετε το πιο γρήγορο μοντέλο σε κάθε κατηγορία
Κατηγορίες
  • Κατανεμημένες Ομάδες
  • Τροποσ Ζωησ
  • Αλλα
  • Κερδοφορία & Αποδοτικότητα
  • © 2022 | Ολα Τα Δικαιώματα Διατηρούνται

    portaldacalheta.pt