Liquibase neden ve ne zaman?


103

Yığın taşmasıyla ilgili bu yanıtı aradım, ancak bununla ilgili herhangi bir soru bulamadım. Ben yeniyim Liquibaseve öğrenmek istiyorum

  • Neden Liquibase?
  • LiquibaseProjede tam olarak ne zaman kullanılmalı ?

Bunun tüm veritabanı değişikliklerini tek bir yerde tutmak olduğunu biliyorum, ancak benzerleri SQLbazı depo sistemlerinde basit dosyalar oluşturarak ve zamanla güncellemeye devam ederek yapılabilir.

Yanıtlar:


72

Kendi kendine yönetilen bir şema oluşturma dosyası ile Liquibase (veya diğer şema geçiş araçları) arasındaki temel fark, ikincisinin bir şema değişiklik günlüğü sağlamasıdır . Bu, zaman içindeki şema değişikliklerinin bir kaydıdır. Veritabanı tasarımcısının şemadaki değişiklikleri belirlemesine olanak tanır ve isteğe bağlı olarak şemanın programlı olarak yükseltilmesini veya düşürülmesini sağlar.

Aşağıdakiler gibi başka faydalar da vardır:

  • Veritabanı satıcısının bağımsızlığı (bu şüpheli, ancak deniyorlar)
  • otomatik dokümantasyon
  • veritabanı şeması farklılıkları

Alternatif araçlardan biri de uçuş yoludur .

Veri kaybı olmadan şema güncellemelerini otomatik olarak yönetmek istediğinizde veya buna ihtiyaç duyduğunuzda bir şema taşıma aracı kullanmayı seçersiniz. Yani, sisteminiz bir müşteri sitesi veya kararlı test ortamı gibi uzun ömürlü bir ortama dağıtıldıktan sonra şemanın değişmesini beklersiniz.


1
Ama bir dosya oluşturduğumuzu ve içine ilk betiğimizi yazdığımızı ve git diyelim diyelim. Şimdi, zamanla, şema güncellenecek ve herhangi bir zaman aralığına geri dönüp şemayı da değiştirebiliriz, değil mi?
SSC

1
Bu yaklaşımla şemayı yeniden oluşturabilirsiniz, ancak eski sürüme geçemez / yükseltemezsiniz. Aradaki fark, veri kaybıdır.
Synesso

1
Ama diğer kısım, ne zaman kullanılacağı eksik?
SSC

1
Synesso Bir süre kullanıldıktan sonra bir üretim veritabanını otomatik olarak nasıl düşürebileceğinizi ve yeni eklenen sütunları kullanarak veriler üzerinde kararlar alındıktan sonra henüz nasıl düşürebileceğinizi anlamıyorum. Onları şimdi zorunlu olarak bırakamazsınız. Ayrıca bunun, başlangıçta bir sürüm tablosuna basit bir ekleme ve sonunda neyin uygulandığını izlemek için bir güncelleme içeren kaynak kontrolünde tutulan bir dizi sürümü belirlenmiş SQL komut dosyasından daha iyi olmasının nedenini anlamıyorum.
Khorkrak

Eklenen başka bir soru ... hatayı java'da e-posta yoluyla nasıl kaydedebiliriz. SQL değişiklikleri XML ile ne zaman değişir?
UmaShankar

19

Şema değiştirmeye gelince, likibazın geliştiriciler arasında disiplin yarattığını gördüm. Diğer geliştiricinin değişikliğinin üzerine yazıp uygulayamazsınız. Bunun yerine, kendi değişiklik kümenizi yaratır ve bunu yürütülecek değişiklik dizisinin sonuna eklersiniz. Bu aynı zamanda hangi değişikliğin ne zaman geldiği ve onu kimin getirdiği konusunda netlik sağlar.

Şema sürekliliğine yönelik çok "versiyonlanmış" bir yaklaşım.

Yeni başlayanlar için, yine de "gereksiz çalışma" izlenimi veriyor.


4
Hangisiyim (Bana tam olarak bahsettiğiniz izlenimi veriyor: P) Bu önemli tespit için +1
İsmail Şahin

haklısınız, en son değişiklikleri kimin ve ne zaman yaptığını takip edebiliriz. belirli bir noktaya geri dönmemiz gerekirse sıvı yardımcı olacaktır
Anoop PS

7

Dev, qa, production'da birden fazla veritabanı örneğiniz olduğunda ve değişiklik geçmişini otomatik olarak izlemek ve değişiklikleri akıllıca uygulamak için bir araca sahip olmak istediğinizde (mevcut şema ve son şemanın farkını uygulayın), sıvı taban veya uçuş yolu gibi araçlar çok yararlı olacaktır. .


3

Felsefeniz veritabanının sonradan düşünülmesi olduğunda Liquibase'in harika olduğuna inanıyorum. Bu felsefe, üretimdeki kötü veritabanlarının çoğuna neden oldu - ve çoğu kötü. Bir veritabanı, her biri kendi silolarında çalışan uygulama geliştiricileri tarafından değil, tüm iş sisteminin tam görünümü ile tasarlanmalıdır. İkinci yöntem, geçici çözümlere, normal olmayan verilere, tablolar arasında zayıf ilişkilere, iş alanlarının tekrarlanmasına ve müşterinin dağıtımdan kısa bir süre sonra neden olduğu sorunlar nedeniyle nefret edeceği, genel olarak dağınık, yüksek bakım maliyetli bir sisteme neden olur. Bir veritabanı iş ilişkilerini DOĞRU olarak yansıtacak şekilde tasarlanırsa, ömrü 5 kat daha uzun olacak ve ne yazık ki çoğu gibi parça parça tasarlanmış bir veritabanından 5 kat daha iyi amacına hizmet edecektir.

Liquibase başlı başına bir sorun değildir, ancak uygulama geliştiricilerin veritabanını tasarlamasını sağlar. Sorun budur.


19
Özellikler değişir, yeni özellikler eklenir, hatalar giderilir. "Bir veritabanının iş ilişkilerini DOĞRU bir şekilde yansıtacak şekilde tasarlandığı" varsayılsa bile, işletmeler ve iş ilişkileri zamanla değiştiği için zaman içinde DB'de değişiklik yapmanız gerekmesi normaldir ve beklenir. Liquibase yalnızca bu değişiklikleri yönetmenize yardımcı olur. Bu kadar.
Steven Byks

Deneyimlerime göre çok az sayıda DBA ve pek çok geliştirici Liquibase kullanıyor - bence @ bob-barry, sonuçların çoğunda yer alıyor. Liquibase (veya değişikliklerin geçmişi için sadece eski git) gibi araçları kullanan DBA'lar bunu faydalı bulacaktır.
PhillipHolmes

Evrimsel DB uygulamaları ve genel olarak çevik, akran incelemelerini teşvik eder ve etkinleştirir. Performans gereksinimleri olan bir DB için DBA'lar, DB değişiklikleri için uygulama ekipleriyle çalışmaya devam eder. Liquibase gibi araçlar, normalleştirme argümanınıza aykırı olarak daha kolay yeniden düzenleme sağlar. 10 yıl önce, her biri kendi yama ve yükseltme döngülerine sahip 20'den fazla istemciye kurulan bir ürün için çalıştım. 2 yıllık kabustan sonra ve el ile böyle bir alet yazmaya çalıştıktan sonra, öğrenir öğrenmez likitaza atladık. Ve 200 M kayıt içeren tablolarımız vardı, o zaman için çok büyük değil, ama DBA'lara ihtiyaç duyan bir şey.
user6317694

3
Umarım bir gün cennette orada buluşuruz. Elbette kulağa hoş geliyor.
Bijan

3

Aşağıdaki makale http://shengwangi.blogspot.com/2016/04/liquibase-helloworld-example.html üzerinden geçerseniz likibazın neden yanıtlanabileceğini düşünüyorum.

Dikkatlice okursanız, basit mvn veya CLI komutlarının yardımıyla daha yüksek bir sürümden daha düşük bir sürüme düşürme yeteneği çok kullanışlıdır; bu, sql dosyanızı GIT'e kaydetme yaklaşımından geçerseniz elde edemezsiniz, çünkü o zaman bu komut dosyalarını manuel olarak çalıştırmanız gerekir ve ayrıca aşağıdaki gibi değişiklik setine sahip değilsiniz: - değişiklikleri kim yaptı, yazar vb.


0

Ekibimin DevOps Personeli olarak tüm SQL dosyalarımın tek bir yerde, yani SCM'mde (Kaynak Kod Yönetimi) olmasını tercih ederim

Ayrıca CI / CD aşamasında, DB Şeması onunla birlikte oluşturulursa, çok fazla zaman ve kaynak tasarrufu sağlar. O müşteri için veritabanınızı başka bir kişinin yönetmesine gerek kalmaz.

Flyway, Liquibase, EF vb. Gibi ORM, bunu başarmada yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.