Basis Data Refactoring Toolkit: Jalur Terbang vs. Liquibase

Pada artikel ini, kita akan berbicara tentang Flyway dan Liquibase , dua alat refactoring database berbasis Java yang paling populer. Tujuan artikel ini adalah untuk membandingkan alat-alat ini dan mencari tahu mana yang lebih baik untuk digunakan dalam kasus apa.


Db omnibus


Jalur terbang


Konsep Flyway berpusat di sekitar enam tim yang berbeda untuk mendukung refactoring dan pembuatan versi basis data otomatis. Perintah-perintah ini dapat dieksekusi dari baris perintah, selama proses pembangunan (diproduksi menggunakan Maven atau Gradle), atau langsung dari kode Java menggunakan panggilan API. Saat menjalankan perintah ini, Anda perlu memberikan parameter untuk menghubungkan ke database (url, nama pengguna, kata sandi) yang ingin Anda refactor.


Perintah utama disebut migrate dan melakukan fungsi yang berisi seluruh esensi refactoring basis data: ia memindai folder khusus dengan skrip sql (masing-masing memiliki nomor versi dalam nama file) dan memeriksa mana di antaranya yang telah diterapkan pada basis data target. Kemudian mengeksekusi mereka yang belum diterapkan ke database ini. Dalam hal terjadi konflik, misalnya, jika skrip yang telah diterapkan telah berubah sejak penggunaannya, Flyway mengganggu operasinya dengan pesan kesalahan.


Fitur unik dari Flyway adalah bahwa skrip migrasi tidak hanya dalam format SQL, tetapi juga dalam bentuk kode Java. Opsi kedua memungkinkan Anda untuk menerapkan migrasi dinamis dengan logika kompleks. Namun, Anda harus menggunakan pendekatan Java dengan hati-hati, karena skrip migrasi seperti itu biasanya sulit untuk di-debug jika ada yang salah dengan mereka.


Selain perintah migrate utama, Flyway memiliki perintah tambahan yang memfasilitasi proses refactoring basis data.


Perintah info menunjukkan semua skrip migrasi yang tersedia dari folder yang diberikan dan mencatat yang mana dari mereka telah digunakan dan mana yang hanya akan diterapkan ke database target.


Untuk memeriksa apakah skrip yang diterapkan ke database telah berubah, perintah validate digunakan. Berguna bagi kita untuk mengetahui apakah skrip yang sudah diterapkan dari folder telah diubah sejak diterapkan ke basis data, karena ini mungkin berarti skrip tersebut diterapkan ke basis data yang berbeda dalam versi yang berbeda, dan ini dapat menyebabkan masalah.


Jika Anda berpikir bahwa skrip harus digunakan terlepas dari kegagalan yang ditunjukkan oleh perintah validasi, Anda dapat menjalankan perintah perbaikan. Ini akan mengatur ulang tabel database yang digunakan oleh Flyway untuk memperbaiki skrip mana yang telah diterapkan (secara default tabel ini disebut SCHEMA_VERSION).


Dan perintah terakhir, tetapi tidak kalah penting, clean sepenuhnya membersihkan skema yang dipilih (seperti yang Anda tahu, perintah ini harus digunakan hanya untuk database uji).


Liquibase


Liquibase mengambil pendekatan berbeda untuk mengimplementasikan refactoring basis data. Tidak seperti Flyway, yang mendukung skrip migrasi hanya dalam format SQL dan Java, Liquibase memungkinkan Anda untuk mengabstraksi dari SQL dan dengan demikian menghapus database refactoring dari implementasi spesifiknya.


Alih-alih skrip SQL, Liquibase mendukung skrip migrasi dalam format XML, YAML dan JSON. Dalam skrip ini, Anda menentukan perubahan ke database di tingkat abstraksi. Untuk setiap perubahan, Liquibase memiliki elemen terkait dalam XML, YAML, dan JSON. Misalnya, perubahan yang membuat tabel database baru dalam format YAML terlihat seperti ini:


 createTable: tableName: Customer columns: - column: name: name type: varchar(255) - column: name: address type: varchar(255) 

Perubahan seperti add column , create index atau alter table dan lainnya, terlihat serupa.
Selama operasi, Liquibase secara otomatis menerapkan semua skrip yang belum digunakan, dan, seperti Flyway, menyimpan metadata mereka dalam tabel basis data khusus. Seperti Flyway, Liquibase dapat dipanggil dari baris perintah alat build atau langsung melalui API Java-nya.


Kapan menggunakannya?


Flyway dan Liquibase mendukung semua fungsi yang diperlukan untuk refactoring dan pembuatan versi basis data profesional, sehingga Anda akan selalu tahu versi skema database yang Anda hadapi dan apakah itu cocok dengan versi perangkat lunak Anda. Kedua alat terintegrasi dengan Maven dan Gradle dan dalam ekosistem Boot Spring, sehingga refactoring basis data dapat sepenuhnya otomatis.


Flyway menggunakan SQL untuk mengidentifikasi perubahan basis data, sehingga Anda dapat mengonfigurasi skrip SQL untuk bekerja secara efektif dengan tipe database tertentu pada proyek Anda, seperti Oracle atau PostgreSQL. Di sisi lain, Liquibase memperkenalkan level abstraksi tambahan menggunakan XML, YAML, atau JSON untuk mendeteksi perubahan database. Dengan demikian, Liquibase lebih cocok untuk perangkat lunak yang perlu diinstal di lingkungan yang berbeda dengan berbagai jenis server basis data. Namun, jika Anda memerlukan kontrol penuh atas SQL Anda, Flyway adalah pilihan Anda, karena memungkinkan Anda untuk memodifikasi database menggunakan SQL sepenuhnya kustom atau bahkan menggunakan kode Java.


Tangkapan dengan kedua alat adalah bahwa mereka didukung oleh satu orang (dari penerjemah: menurut penulis) , dan bukan oleh tim besar. Ini mungkin memiliki dampak negatif pada pengembangan kedua alat di masa depan, tetapi ini tidak perlu. Pada saat penulisan ini, aktivitas dalam repositori Flyway GitHub lebih tinggi daripada di repositori Liquibase .

Source: https://habr.com/ru/post/id440696/


All Articles