Liquibase ve Flyway nedir, farkları nelerdir?
Temel olarak veri tabanı taşıma (migration) işlemlerimizi gerçekleştirebildiğimiz ve bunun yanında farklı yardımcı mekanizmaları da destekleyen araçlar olduklarından bahsedebiliriz.
Terimsel ifadeleriyle,
Liquibase, veritabanı şema değişikliklerini izlemek, yönetmek ve uygulamak için açık kaynaklı, veri tabanından bağımsız bir kütüphanedir.
Flyway, açık kaynaklı bir veritabanı taşıma (migration) aracıdır. Sadeliği ve konfigürasyondan bağımsız konvensiyonel bir mekanizmayı ön plana çıkarmayı amaçlar.
Geliştirdiğimiz kodlar için git versiyonlama sistemi ne ise, veri tabanı işlemlerimiz için de bu araçları paralel pozisyonda konumlandırabiliriz.
Taşıma (migration) olarak ifade ettiğimiz kavram temelde birkaç farklı işlem olarak listelenebilir. Bu işlemler,
- Veri tabanı şemasında yapılabilecek değişiklikler
- Veri tabanında saklanan veri üzerinde yapılabilecek değişiklikler
- Veri tabanı erişim ve yetkilerde yapılabilecek değişiklikler
olmak üzere üç kategori altında toplanabilir.
Araçların tüm bunları nasıl başardıkları ile ilgili teknik detaylara hep beraber bir göz atalım.
Flyway temelde altı adet komut - migrate, info, validate, repair, clean - üzerine kurulmuş bir mekanizmaya sahiptir ve bu komutlar birçok araç ile entegre şekilde çalışabildiğinden farklı platformlarda hem uygulanabilirlik hem de tümleşiklik anlamında geliştiriciler tarafından tercih edilmektedir. Değişiklik kümelerini dosyalar şeklinde yönetir. Ham SQL formatlarında değişiklik kümelerini çalıştırabildiği gibi, Java tabanlı değişiklik kümelerini de desteklemektedir.
Liquibase biraz daha farklı bir strateji izlemektedir. Flyway’in sunduğu özelliklerden farklı olarak, Java veya diğer programlama dillerine ait veri tabanı operasyonları desteklememektedir. Ham SQL formatlarını çalıştırabilir; fakat asıl odaklandığı nokta veri tabanı bağımsızlığı için bir soyutlama alt yapısına sahip olmasıdır. Liquibase değişiklik kümelerini XML, JSON, YAML dosyalarında ve birbirleri ile kombine olabilecekleri şekilde yönetmektedir.
Her ikisi de genel anlamda Java odaklı ve maven/gradle gibi araçlarla çalışabilir, ayrıca harici olarak komut satırından da gerekli işlemler yapılabilmektedir.
İki aracın yetenekleri karşılaştırmalı olarak listelemek gerekirse;
Liquibase
- Veri tabanı soyutlama imkanı sunmaktadır, soyutlamaya uygun yazılan değişiklik kümeleri desteklenen tüm veri tabanı teknolojilerinde çalışabilir.
- Değişiklik kümelerinin tek seferlik veya tekrarlı çalıştırılabilmesini destekler
- Çalıştırılmadan önce yapılacak değişiklikleri üretebilir ve bu değişiklikler yayın öncesi özellikle veri tabanı ekipleri tarafından gözden geçirme aşamasında incelenebilir.
- Dry-run olarak çalıştırmayı destekler.
- Değişiklik kümelerinin koşullu çalıştırılabilmesini destekler.
- Geri alma (rollback) işlemlerini destekler.
- Değişiklik kümelerinin sıralamasının yönetimi ve değişikliğe katkıda bulunan geliştiricilerin dosya organizasyonu esnektir.
Flyway
- Veri tabanı soyutlamayı desteklememektedir, yazılan SQL cümlecikleri veri tabanı teknolojisine bağımlıdır. Desteklediği Java tabanlı değişiklik kümeleri ile bu noktada bir alternatif sunmaktadır.
- Değişiklik kümelerinin tek seferlik veya tekrarlı çalıştırılabilmesini destekler.
- Çalıştırılmadan önce yapılacak değişiklikleri sadece ücretli sürümü üretebilir.
- Dry-run olarak çalıştırmayı sadece ücretli sürümü destekler.
- Değişiklik kümelerinin koşullu çalıştırılabilmesini desteklemez, fakat Java tabanlı değişiklik kümelerinde ilgili şartlar kodun içinde oluşturulabilir.
- Geri alma (rollback) işlemlerini sadece ücretli sürümü destekler.
- Değişiklik kümelerinin sıralamasının yönetimi ve değişikliğe katkıda bulunan geliştiricilerin organizasyonu dosya isimlerine bağımlılığın yüksek olmasından dolayı bir dezavantaj olarak eleştiri almaktadır.
Kavramsal olarak ele aldığımız bilgiler ışığında, hangisini seçeceğinize karar vermek sizlerin sahip olduğu teknoloji alt yapısı, ekibininiz, uygulamanın büyüklüğü ve ihtiyaçlarınız doğrultusunda şekillenebilir. Her iki aracı da küçük olmayan projelerde kullanan bir geliştirici olarak, dosya organizasyonu ve özellikle kritik yeteneklerin ücretsiz sunuluyor olmasının da farklı bir avantaj olarak değerlendirdiğimden dolayı tercihimi Liquibase’den yana kullandığımı söyleyebilirim.
Yorumlarınız için şimdiden teşekkürler.
Kaynakça
- https://martinfowler.com/articles/evodb.html
- https://www.liquibase.org/get-started/how-liquibase-works
- https://www.liquibase.org/liquibase-vs-flyway
- https://flywaydb.org/documentation
- https://reflectoring.io/database-refactoring-flyway-vs-liquibase
- https://dzone.com/articles/flyway-vs-liquibase
- https://4lex.nz/technical/2020/04/23/spring-boot-database-migrations/
- https://levelup.gitconnected.com/database-migrations-with-liquibase-and-flyway-5946379c7738