2012-12-19 16 views
5

Tek bir Mysql veritabanını paylaşan iki yazılım yığını, Ruby on Rails ve Java var. Mevcut bir veritabanı şemasını okuyarak ve kod üreterek çalışan Jooq Java veritabanı soyutlama katmanını kullanıyoruz.Çapraz platformda Mysql veritabanı şemasını korumak için en iyi yöntemler nelerdir?

Şema değişikliklerini takip etmek için Rails geçişlerine güveniyoruz, ancak Java geliştiricilerimiz buna aşina değil ve Rails dev'lerimiz de sorunları bir kereden fazla aşmak zorunda kaldı. Ayrıca şema değişikliğinin 5-10 dakika sürebildiği, oldukça şaşalı bir süreçtir, şayet şemayı doğrudan MySql Workbench gibi bir araçla değiştirirse, saniyeler sürer.

Rails'e bağlı olmayan DB şemamızı değiştirmek için bir çözüm bulunması tercih edilebilir, herhangi biri uygun bir yaklaşım önerebilir mi?

+2

Liquibase veya Flyway'i inceleyin. Ve ** hiçbir zaman doğrudan bir SQL aracıyla değişiklik yapmaz. Uzun vadede çok fazla sorun var. –

+0

[dbv (veritabanı sürüm kontrolü)] (https://github.com/victorstanciu/dbv) iyi bir uyum olabilir. –

+3

Tüm veritabanı işlemleri için saklı yordamları oluşturarak veritabanında bir soyutlama katmanı oluşturmayı düşündünüz ve hem java hem de RoR kodunun yalnızca bu yordamlar aracılığıyla veritabanıyla etkileşime girmesini sağladınız mı? Bu şekilde, ne RoR ne de Java için herhangi bir kod kırmadan veritabanı şemasını değiştirebilirsiniz. – Philipp

cevap

5

Sanırım Liquibase'a bakabilirsiniz. Bu Java tabanlı bir araçtır, ancak anladığım kadarıyla gereksinimlerinize uyacaktır. Bu aracı kullanarak, veritabanı içeriğini (hem yapı hem de veri) ifade edebilir, ardından çalışan bir veritabanına karşı böyle bir araç çalıştırabilirsiniz ve araç hangi değişikliklerin eksik olduğunu size söyler ve bunları uygular.

+0

Öneriniz için teşekkürler, ancak geçişlerin XML'de ifade edilmesi gerektiği, muhtemelen benim için bir anlaşmazlıktır, insanlar diğer sunumların çok daha anlamlı olduğu yerlerde XML kullandıklarından gerçekten nefret ediyorum (bu durumda SQL açık bir dil değildir) geçişleri temsil etmek için?). Yine, sizi eleştirmeyen - sadece havalandırma :-) – sanity

+0

@sanity: daha sonra Flyway checkout. Liquibase ile hemen hemen aynıdır, ancak XML kullanmaz. XML'in burada iyi bir seçim olduğunu düşünmeme rağmen, bunları çalıştırmadan önce geçişlerin doğruluğunu onaylayabilirsiniz ve Liquibase birden fazla hedef DBMS'yi daha iyi işleyebilir. –

+0

Teşekkürler, Flyway gerçekten çok ilginç görünüyor. XML ile ilgili olarak katılmamayı kabul etmemiz gerekecek. Metin biçimlendirmesinden başka bir şey için kullanılması gerektiğini düşünmüyorum, ki bu aslında yapılması gereken bir şey. Ben kim iyi bir genel veri gösterim dili :-) :-) olacağını belirten kim hayranı değilim: – sanity