Migration nedir?
Veritabanı şeması da kod gibi sürümlenmelidir. Her değişiklik numaralı bir betikte tutulur (V12__add_phone.sql) ve araç hangi betiklerin uygulandığını veritabanındaki bir tabloda takip eder. Böylece geliştirme, test ve canlı ortam aynı sırayla aynı şemaya ulaşır.
| Ekosistem | Araç |
|---|---|
| Java / genel | Flyway, Liquibase |
| .NET | EF Core Migrations, DbUp; SQL Server için SSDT / DACPAC |
| Python | Alembic, Django migrations |
| Node.js | Prisma Migrate, Knex |
Kesintisiz değişiklik: genişlet–daralt
Çalışan bir uygulamada sütun adını değiştirmek (first_name + last_name → full_name) tek adımda yapılırsa, eski kod yeni şemayla çöker. Bunun yerine değişiklik geriye uyumlu adımlara bölünür:
- Genişlet: Yeni sütunu ekle (boş bırakılabilir), eski sütunlara dokunma.
- Doldur: Mevcut veriyi yeni sütuna kopyala (büyük tablolarda parça parça).
- Geçiş: Uygulama hem eskiye hem yeniye yazsın, sonra yalnızca yeniden okusun.
- Daralt: Hiçbir kod eski sütunu kullanmadığında eski sütunu kaldır.
-- 1. Genişlet ALTER TABLE customers ADD COLUMN full_name TEXT; -- 2. Doldur UPDATE customers SET full_name = first_name || ' ' || last_name WHERE full_name IS NULL; SELECT customer_id, first_name, last_name, full_name FROM customers LIMIT 3;
Büyük tablolarda kilitMilyonlarca satırlı bir tabloda tek seferlik UPDATE veya bazı ALTER işlemleri tabloyu uzun süre kilitler. Doldurma işlemi 5.000–10.000 satırlık partilerle, kısa işlemlerde yapılır.
İyi bir migration betiği
- Tekrar çalıştırılabilir olsun:
IF NOT EXISTS,CREATE OR ALTER. - Tek bir mantıksal değişiklik içersin.
- Canlıya gitmeden önce canlı boyutuna yakın veride denenmiş olsun.
- Geri dönüş planı olsun (down script veya ileri düzeltme).