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
- Genişlet: yeni bir sütun/tablo ekle (null olabilir veya varsayılanlı), eskiden hiçbir şey kaldırma.
- İkisine de yaz: uygulama hem eskiye hem yeniye yazar (çift yazma) ve okumayı eskiden sürdürür.
- Doldur (backfill): mevcut verileri aşamalar hâlinde (gruplar) yeni yapıya kopyala.
- Okumaları değiştir: uygulama yeniden okur (özellik bayrağı, doğrula).
- 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).
CONCURRENTLYolmadan 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