EMZETT.
Giriş yap

Kesintisiz şema değişiklikleri: genişlet ve daralt (expand and contract)

Kısaca: Expand-and-contract’ta bir veri tabanı şeması, arada eski ve yeni program sürümleri çalışsın ve kesinti gerekmesin diye birkaç geriye dönük uyumlu adımda değiştirilir.

Biraz daha ayrıntılı: Bir sütunu yeniden adlandırmak basit görünür. Ancak uygulama birkaç örnekte çalışıyorsa veya geri almalar varsa, sert bir geçiş her şeyi bozabilir: dağıtım sırasında eski ve yeni sürümler aynı anda çalışır. Bu yüzden değişiklikler uyumlu adımlara bölünür.

Ayrıntılı

Kalıp

  1. Genişlet: yeni bir sütun/tablo ekle (null olabilir veya varsayılanlı), eskiden hiçbir şey kaldırma.
  2. İkisine de yaz: uygulama hem eskiye hem yeniye yazar (çift yazma) ve okumayı eskiden sürdürür.
  3. Doldur (backfill): mevcut verileri aşamalar hâlinde (gruplar) yeni yapıya kopyala.
  4. Okumaları değiştir: uygulama yeniden okur (özellik bayrağı, doğrula).
  5. Daralt (temizlik): yalnızca hiçbir sürüm artık eskiyi kullanmadığında eski sütun kaldırılır.

Örnek: name sütununu first_name ve last_name olarak bölmek

-- 1. Genişlet
ALTER TABLE users ADD COLUMN first_name text, ADD COLUMN last_name text;
-- 2. Uygulama name, first_name, last_name yazar
-- 3. Gruplar hâlinde doldur
UPDATE users SET first_name = split_part(name,' ',1), last_name = split_part(name,' ',2)
  WHERE id BETWEEN 1 AND 10000 AND first_name IS NULL;
-- 4. Uygulama first_name/last_name okur
-- 5. Daralt (daha sonra, ayrı)
ALTER TABLE users DROP COLUMN name;

Tehlikeli işlemler

  • Eski program sürümleri kullanırken bir sütunu yeniden adlandırmak veya silmek.
  • Büyük bir tabloda varsayılansız NOT NULL (tabloyu kilitleyebilir).
  • CONCURRENTLY olmadan dizin oluşturmak (PostgreSQL) yazmaları engeller.
  • Tür değiştirmek (tabloyu yeniden yazar).
  • Tek bir işlemde büyük güncellemeler (kilitler, çoğaltma gecikmesi). Her zaman gruplar hâlinde.
  • Migrasyonlar ve dağıtım birlikte zamanlanmalıdır.

Uygulama

Migrasyonları gerçekçi veri hacimleriyle bir kopyada test et. Kritik adımlardan önce yedekler, geri alma planı, migrasyonları sürümle ve depoda tut. Araçlar: Flyway, Liquibase, Alembic, Prisma Migrate, Drizzle Kit, büyük tablolar için gh-ost/pg-osc. Küçük sistemler için bir bakım penceresinin, özenli çok adımlı yöntemlerden daha basit olup olmadığını kontrol et.

Ayrıca bak: Veri tabanı migrasyonu, Blue-green ve canary dağıtımı, Özellik bayrakları, Yedekleme stratejisi