PoolByte

Veritabanı şema geçişi: Uyumlu migration ve veri dönüşümü

· PoolByte Technology

Veritabanı şema geçişi: Uyumlu migration ve veri dönüşümü

Yeni bir uygulama sürümü çoğu zaman yalnız dosya değişikliği değildir. Sütun eklemek, bir alanı başka biçimde saklamak veya eski veriyi dönüştürmek veritabanı şemasını da etkiler. Güvenli bir şema geçişi, eski ve yeni uygulama sürümlerinin hangi aşamada hangi veriyi okuyacağını açıkça planlar.

Bir anda değiştirmek yerine uyumluluk penceresi açın

Örneğin tek bir adres alanını şehir ve açık adres olarak ayırıyorsunuz. Eski alanı ilk adımda silmek, henüz güncellenmemiş uygulama süreçlerini bozabilir. Önce yeni alanları eklemek, yeni yazma davranışını devreye almak ve eski kayıtları kontrollü dönüştürmek daha yönetilebilir bir yol olabilir. Bu süreçte iki alanın hangisinin yetkili kaynak olduğu belirlenmelidir.

“Ekle, taşı, kaldır” yaklaşımında kaldırma ayrı bir yayına kalabilir. PostgreSQL tablo değiştirme dokümanı, farklı şema işlemlerinin davranışını açıklar. Her veritabanında aynı komutun aynı kilit ve süreyle çalışacağını varsaymayın; sunucu sürümü ve tablo yapısı sonucu etkiler.

Veri dönüşümünü küçük ve izlenebilir çalıştırın

Milyonlarca satırı tek seferde güncellemek uzun kilitler ve yoğun günlük üretimi doğurabilir. Küçük gruplar, ilerleme kaydı ve kaldığı yerden devam edebilme, operasyonu daha denetlenebilir yapar. Başarılı satırların tekrar işlenmesi veriyi ikinci kez bozmayacak şekilde tasarlanmalıdır.

Dönüşüm sırasında gerçek kullanıcıların yaptığı değişiklikleri de hesaba katın. Dünkü veriye göre hazırlanan bir aktarımın bugün güncellenen adresi ezmemesi gerekir. Kaynak sürümü, güncellenme zamanı veya uygulamanın yazma stratejisi bu kararı belirleyebilir. Dönüştürülemeyen kayıtlar sessizce boş bırakılmamalı; ayrı bir inceleme listesine alınmalıdır.

Geri dönüş yalnız dosyaları geri koymak değildir

Yeni sürüm veriyi eski sürümün anlayamayacağı biçimde yazdıysa kodu geri almak yeterli olmayabilir. Şema ve veri için geri dönüş sınırını yayın öncesinde tanımlayın. Geri dönüşüm kayıplı olacaksa bunu bir “undo” düğmesi gibi sunmayın. Bazı durumlarda güvenli çözüm ileri yönde düzeltme yapmaktır.

Şema komutlarının transaction davranışı veritabanına göre farklıdır. MySQL implicit commit açıklaması, bazı komutların işlem sınırını değiştirebildiğini gösterir. Sırf migration aracı kullanıldığı için her adımın otomatik geri alınabileceğini varsaymayın. Uygulama ve veritabanı sürümüne uygun prova yapın.

Yayın dosyasında bulunması gerekenler

  • Geçiş kimliği ve önceki şema sürümü.
  • Beklenen süre, kilit etkisi ve gerekli boş alan.
  • Eski ve yeni sürümün birlikte çalışabileceği aşamalar.
  • Dönüşen ve reddedilen kayıt sayısını doğrulama yöntemi.
  • İşlem yarıda kesilirse devam veya kurtarma adımı.
  • Artık kullanılmayan alanların hangi yayında kaldırılacağı.

Staging ortamı bu planı temsili verilerle sınamak için kullanılabilir. Ancak çok küçük bir test tablosunda saniyelik sonuç almak canlıdaki süreyi kanıtlamaz. Şema geçişinin tamamlanması, komutun hata vermemesi kadar uygulamanın eski ve yeni kayıtları doğru kullanabilmesidir.