Kesintisiz Veritabanı Migration Stratejisi

Kesintisiz Veritabanı Migration Stratejisi

Kesintisiz Veritabanı Migration Stratejisi

Uygulama ve veritabanını aynı anda değiştirmek tek sunuculu küçük sistemlerde çalışabilir; ancak rolling deployment veya yoğun trafik altında risklidir. Yeni kod eski şemayı, eski kod da yeni şemayı kısa bir süre kullanabilmelidir. Kesintisiz migration bu geçiş dönemini bilinçli olarak tasarlar ve geri dönüş seçeneğini korur.

Expand-contract yaklaşımı

Expand aşamasında yeni kolon veya tablo geriye uyumlu biçimde eklenir; mevcut kolon hemen silinmez ve zorunlu hâle getirilmez. Uygulama bir süre hem eski hem yeni alanı okuyup yazabilir. Backfill tamamlandıktan ve bütün instance'lar yeni sürüme geçtikten sonra contract aşamasında eski alan kaldırılır. Büyük tablo değişiklikleri küçük partilerle yapılır ve kilit süresi izlenir.

Name alanını bölme örneği

Customers.Name alanını FirstName ve LastName olarak ayırmak istediğimizi düşünelim. İlk migration yeni nullable kolonları ekler; ardından veri küçük partilerle taşınır.

ALTER TABLE dbo.Customers ADD
    FirstName nvarchar(100) NULL,
    LastName  nvarchar(100) NULL;

WHILE 1 = 1
BEGIN
    UPDATE TOP (1000) dbo.Customers
    SET FirstName = LEFT(Name, CHARINDEX(' ', Name + ' ') - 1),
        LastName = LTRIM(SUBSTRING(Name, CHARINDEX(' ', Name + ' '), 200))
    WHERE FirstName IS NULL;

    IF @@ROWCOUNT = 0 BREAK;
    WAITFOR DELAY '00:00:00.100';
END

Batch güncelleme transaction log büyümesini ve uzun süreli kilitleri sınırlar. Uygulama geçiş sırasında yeni alanlar doluysa onları, değilse Name alanını okuyabilir. Tüm kayıtlar taşınıp eski uygulama sürümü kalmadığında NOT NULL kısıtı ve eski kolonun kaldırılması ayrı deployment olarak yapılır.

Güvenli yayın adımları

  1. Şema değişikliğini geriye uyumlu ve yalnızca ekleme yapan bir migration olarak tasarlayın.
  2. Yeni uygulamayı iki şemayla da çalışabilecek şekilde yayınlayın.
  3. Backfill işlemini küçük partiler, ilerleme metriği ve yeniden başlatılabilir komutlarla yürütün.
  4. Eski sürüm kalmadığını ve yeni alanların eksiksiz dolduğunu sorgularla doğrulayın.
  5. Kısıt sıkılaştırma ve kolon silme işlemini sonraki bağımsız yayına bırakın.

Riskli uygulamalar

  • Yoğun kullanılan büyük kolonu tek transaction içinde dönüştürmek.
  • Yeni NOT NULL kolonu varsayılan değer olmadan doğrudan eklemek.
  • Uygulama yayınlanmadan önce eski kolonun adını değiştirmek veya silmek.

Sonuç

Kesintisiz migration teknik bir SQL komutundan çok dağıtım protokolüdür. Şemayı genişletmek, kodu uyumlu hâle getirmek, veriyi gözlemlenebilir biçimde taşımak ve son olarak eski yapıyı daraltmak gerekir. Küçük ve geri alınabilir adımlar, birkaç saniye kazanmaktan daha değerlidir ve 5xx dalgalarının önüne geçer.

0 Yorumlar

Yorum Yaz

E-posta adresiniz yayınlanmayacaktır.