Migration Ne Demek?
Yayın: · Son güncelleme:
Migration Ne Demek? Kısaca
Migration, yazılım geliştirmede veritabanı şemasındaki değişiklikleri sıralı ve sürümlenmiş dosyalar hâlinde tanımlama ve uygulama yöntemidir. Tablo ekleme, sütun değiştirme gibi adımlar kodla kaydedilir ve her ortamda aynı sırayla çalıştırılır.

Migration ne demek?
Migration, İngilizcede "göç" ya da "taşınma" anlamına gelir. Yazılım dünyasında ise çoğunlukla veritabanı şemasını adım adım değiştiren kod dosyalarını anlatır. Her dosya tek bir değişikliği tarif eder: yeni bir tablo oluşturmak, bir sütun eklemek ya da bir indeksi kaldırmak gibi.
Daha genel anlamda sistemden sisteme veri taşımaya da migration denir. Bu kullanım için Türkçede veri göçü ifadesi daha yaygındır.
Nasıl çalışır?
Migration dosyaları oluşturulma sırasına göre numaralanır ya da tarih damgasıyla adlandırılır. Araç, veritabanında hangi dosyaların uygulandığını ayrı bir tabloda tutar ve yalnızca yenilerini çalıştırır. Çoğu dosyada iki bölüm bulunur: değişikliği uygulayan "up" ve geri alan "down".
Varsayımsal bir Laravel projesinde kullanıcılara telefon alanı eklemek için yeni bir migration oluşturulur ve php artisan migrate komutu çalıştırılır. Django'da aynı iş python manage.py makemigrations ve migrate komutlarıyla yapılır. Flyway, Liquibase ve Alembic de yaygın migration araçlarıdır.
Neden kullanılır?
Ekipteki her geliştiricinin yerel veritabanı, test ortamı ve canlı ortam aynı şemayı kullanmalıdır. Elle yapılan değişiklikler unutulur ya da farklı sırayla uygulanır. Migration dosyaları sürüm kontrolüne girdiği için şemanın geçmişi kodla birlikte izlenebilir ve yeni katılan biri tek komutla güncel yapıyı kurabilir.
Canlı ortamda nelere dikkat etmeli?
Büyük tablolarda sütun eklemek ya da türünü değiştirmek tabloyu uzun süre kilitleyebilir. Bu tür değişiklikleri önce test ortamında, gerçeğe yakın veri hacmiyle deneyin. Sütun silme gibi geri dönüşü zor adımlardan önce yedek alın ve uygulamanın eski sürümünün yeni şemayla çalışıp çalışmayacağını kontrol edin.
Sıkça Sorulan Sorular
Migration geri alınabilir mi?
Çoğu araç rollback komutuyla son migration'ı geri almayı destekler, bunun için down adımının doğru yazılmış olması gerekir. Silinen bir sütundaki veri ise yedek yoksa geri gelmez.
Migration ile seed arasındaki fark nedir?
Migration şemayı değiştirir, seed ise tablolara başlangıç ya da test verisi ekler. İkisi genellikle birlikte kullanılır ama farklı amaçlara hizmet eder.