Data Migration, depolama sistemleri, biçimler veya yazılım sürümleri arasında veri aktarma sürecidir. Uygulama geliştirmede, veritabanı yükseltilirken, sağlayıcı değiştirilirken veya yeni bir depolama mimarisine geçilirken veri taşıma gerekir. Gartner (2025)'a göre, projelerin %60'ı yetersiz test ve geri alma stratejisi eksikliği nedeniyle planlanan taşıma bütçesini aşıyor. Doğru planlanmış bir taşıma, kesinti süresini en aza indirir ve veri kaybını ortadan kaldırır.
Önemli Noktalar
Data Migration, bir kaynaktan diğerine veri aktararak tamamlandıktan sonra bütünlüğünü, tutarlılığını ve kullanılabilirliğini sağlama sürecidir. Basit kopyalamadan farklı olarak, taşıma biçim dönüşümü, yinelemeleri kaldırma, referans bütünlüğü denetimi ve sonuç doğrulamasını içerir.
Data Migration ihtiyacı, DBMS yükseltmesi (örneğin, MySQL 5.7'den MySQL 8.0'a), bulut sağlayıcısı değişikliği, monolitikten mikro hizmetlere geçiş veya NoSQL şemasına geçiş sırasında ortaya çıkar. Stripe (2024)'a göre, şirketlerin %89'u en az iki yılda bir veri taşıma ile karşılaşır ve %43'ü bunu teknik güncellemenin en zorlu aşaması olarak kabul eder.
İlk hedef, daha modern bir depolama çözümüne geçerek performansı iyileştirmektir. İkincisi, altyapı sağlayıcısını değiştirirken işletme maliyetlerini azaltmaktır. Üçüncüsü, verilerin belirli bir yargı bölgesinde saklanması gerektiğinde düzenleyici gereksinimlere (GDPR, 152-FZ) uyumu sağlamaktır.
Entegrasyon, çalışan iki sistem arasında sürekli senkronizasyon içerir. Taşıma, tek seferlik bir aktarım ve ardından kaynağın devre dışı bırakılmasıdır. Entegrasyon kaynaktaki verileri silmez; taşıma, hedef sistemin birincil duruma geçirilmesiyle sona erer. Bu temel fark, araçların ve doğrulama yaklaşımlarının seçimini belirler.
Herhangi bir Data Migration'ın temel mimarisi ETL modeline (Çıkarma, Dönüştürme, Yükleme) dayanır. Çıkarma — kaynaktan veri alma. Dönüştürme — hedef şemaya dönüştürme. Yükleme — hedefe yükleme. Her aşamanın kendi kalite kontrol yöntemleri vardır.
Çıkarma aşamasında, veriler kaynak veritabanından, dosya deposundan veya API'den okunur. Artımlı çıkarma (CDC — Change Data Capture), yalnızca değiştirilen kayıtların aktarılmasına izin vererek trafik hacmini azaltır. Tam döküm küçük hacimler için uygundur, ancak terabayt büyüklüğündeki veritabanları için Debezium veya Kafka Connect aracılığıyla akış çoğaltma tercih edilir.
Dönüştürme, sütunları yeniden adlandırma, veri türlerini değiştirme, değerleri normalleştirme ve toplamayı içerir. Örneğin, MySQL'den PostgreSQL'e taşınırken sayısal tür DECIMAL, NUMERIC'e ve tarih biçimi ISO 8601'e dönüştürülmelidir. Talend (2024)'e göre, taşıma süresinin %70'i aktarıma değil, dönüştürmeye harcanır.
Yükleme, toplu (batch insert) veya akış şeklinde gerçekleştirilir. Yinelenenleri ortadan kaldırmak için bir kimlik gücü anahtarı kullanılır. Yüklemeden sonra bir doğrulama adımı zorunludur: kayıt sayılarını karşılaştırma, sağlama toplamlarını hesaplama ve iş kurallarını kontrol etme. Doğrulama olmadan, Data Migration eksik kabul edilir.
Data Migration stratejisinin seçimi, sistem kesinti süresini, geri alma karmaşıklığını ve hazırlık çalışmalarının miktarını belirler. Ana stratejiler Big Bang, Trickle ve Parallel Run'dur. Her biri farklı senaryolarda uygulanabilir.
| Strateji | Kesinti Süresi | Karmaşıklık | Kayıp Riski |
|---|---|---|---|
| Big Bang | Saatler-günler | Düşük | Yüksek |
| Trickle | Dakikalar | Yüksek | Düşük |
| Parallel Run | Hiçbiri | Çok yüksek | Minimum |
Big Bang, eski sistemin tek seferde kapatılması, veri aktarımı ve yenisinin başlatılmasıdır. Küçük hacimler ve basit şemalar için uygundur. Risk: hata durumunda, sistem yedekten tamamen kurtarılana kadar kullanılamaz. 2024'te GitLab, 14 saatlik bir kesinti penceresiyle AWS RDS'den GCP Cloud SQL'e 5 TB veri taşımak için Big Bang'i kullandı.
Trickle, küçük parçalar halinde akış senkronizasyonudur. Eski ve yeni sistem paralel çalışır, değişiklikler gerçek zamanlı olarak çoğaltılır. Veri stabilizasyonundan sonra eski kaynak kapatılır. Bu yaklaşım, çift yönlü senkronizasyon ve çakışma çözümü gerektirir. Kesinti olmadan veritabanı şeması güncellenirken Sürekli Teslimat'ta kullanılır.
Parallel Run — her iki sistem aynı anda çalışır, uygulama her iki kaynaktan da yazar ve okur. Hedefte veri doğrulamasından sonra eski kaynak kapatılır. Bu en güvenli stratejidir, ancak aynı zamanda en pahalısıdır — iki altyapının bakımını gerektirir. Kritik finansal sistemler taşınırken kullanılır.
Uygulama geliştirmede, aktarım nesnesine ve bağlama göre çeşitli Data Migration türleri ayırt edilir. Her türün kendi metodolojisi ve araçları vardır. Türü anlamak, doğru stratejiyi seçmenin ilk adımıdır.
Database Migration, farklı satıcıların DBMS'leri arasında aktarımdır: Oracle'dan PostgreSQL'e, SQL Server'dan MySQL'e, MongoDB'den DynamoDB'ye. Karmaşıklık, uyumsuz veri türlerinde, SQL lehçelerinde ve indeksleme mekanizmalarında yatar. Araçlar: AWS DMS, Debezium, Liquibase.
Aynı uygulamanın farklı sürümleri arasında veri aktarımı — örneğin, varlık yapısında değişikliklerle kod güncellenirken. Genellikle uygulama dilinde taşıma betiklerinin çalıştırılması eşlik eder: Ruby on Rails'te Active Record Migrations, Java için Flyway, .NET'te Entity Framework Migrations. Bu betikler sırayla şemayı ve verileri dönüştürür.
Cloud Data Migration, şirket içi altyapıdan buluta veya bulutlar arasında veri aktarımıdır. AWS Snowball, Azure Data Box ve Google Transfer Appliance, terabayt büyüklüğündeki dizilerin fiziksel taşınması için kullanılır. Çevrimiçi taşıma için VPN tünelleri ve çoğaltma kullanılır. Gartner'a göre, 2027'ye kadar taşımaların %70'i hibrit bulut ortamında gerçekleştirilecek.
Plansız Data Migration garantili başarısızlıktır. Planlama, mevcut şemanın denetimini, veri profillemeyi, strateji seçimini, ortam hazırlığını, test etmeyi ve geri alma planının onaylanmasını içerir. McKinsey araştırmasına (2024) göre, başarısız taşımaların %54'ü resmi bir planın olmamasından kaynaklanır.
Taşımadan önce, kaynak sistemin denetlenmesi gerekir: veri hacmi, tablo sayısı, varlıklar arasındaki bağımlılıklar, boş değer alabilen alan türleri ve yinelemelerin varlığı belirlenmelidir. Profilleme, anormallikleri — anahtar alanlardaki NULL değerleri, biçim uyuşmazlıklarını, bozuk bağlantıları — tanımlar. Bu veriler, tam dökümün taban çizgisini oluşturur.
Ana lansmandan önce, üretim verilerinin bir kopyası üzerinde test taşıması gerçekleştirilir. Amaç, ETL boru hattı performansını, dönüşüm doğruluğunu ve yükleme hızını kontrol etmektir. Big Bang'den önce en az üç tam test döngüsü önerilir. Her döngü, tam aktarım, doğrulama ve geri almayı içerir.
Geri alma, kritik hatalar tespit edildiğinde orijinal sisteme dönüştür. Geri alma planı şunları içerir: başlangıçtan önce kaynağın tam yedeği, şema kurtarma betikleri, eski sistemi yeniden etkinleştirmek için adım adım talimat ve kullanıcı bildirimi için iletişim planı. Onaylanmış bir geri alma planı olmadan, Data Migration üretimde başlatılmamalıdır.
Flyway ile birlikte Kotlin'de pratik bir Data Migration örneğini ele alalım. V1 taşıma betiği, kullanıcılar tablosunu oluşturur ve eski biçimden veri aktarır. Flyway, uygulanan taşımaları otomatik olarak izler ve kimlik gücünü garanti eder.
// V1__Migrate_Users.kt — eski biçimden veri taşıma
import org.flywaydb.core.api.migration.BaseJavaMigration
import java.sql.Connection
import java.sql.PreparedStatement
class V1__MigrateUsers : BaseJavaMigration() {
override fun migrate(connection: Connection) {
val legacyUsers = connection.prepareStatement(
"SELECT id, name, legacy_role FROM users_legacy"
).executeQuery()
val insertStmt: PreparedStatement = connection.prepareStatement(
"INSERT INTO users (id, name, role, migrated_at) VALUES (?, ?, ?, NOW())"
)
while (legacyUsers.next()) {
insertStmt.setInt(1, legacyUsers.getInt("id"))
insertStmt.setString(2, legacyUsers.getString("name"))
val role = mapLegacyRole(legacyUsers.getString("legacy_role"))
insertStmt.setString(3, role)
insertStmt.executeUpdate()
}
}
}
CSV'den PostgreSQL'e veri aktarmak için SQLAlchemy kullanan Python'da bir taşıma örneği. Betik, dosyadan çıkarır, türleri dönüştürür ve hedef tabloları yükler.
# migrate_data.py — dönüştürmeyle CSV'nin PostgreSQL'e yüklenmesi
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("postgresql://user:pass@host/db")
df = pd.read_csv("legacy_orders.csv")
df["order_date"] = pd.to_datetime(df["order_date"])
df["amount"] = df["amount"].astype("float")
df.to_sql("orders", engine, if_exists="append", index=False)
print("Veri taşıma tamamlandı")
Sıkça Sorulan Sorular
Data Migration, sistemler arasında veri aktarmanın tüm sürecidir. ETL, taşımanın aşamalarından birini tanımlayan teknik bir modeldir (Çıkarma, Dönüştürme, Yükleme). ETL yürütme yöntemidir, Data Migration genel görevdir.
Parallel Run en güvenlisidir: her iki sistem aynı anda çalışır, veriler otomatik olarak doğrulanır. Ancak aynı zamanda en pahalı stratejidir. Tipik görevler için, çoğaltma ve geri alma planıyla Trickle yeterlidir.
Süre, hacme, dönüşüm karmaşıklığına ve stratejiye bağlıdır. Big Bang ile 100 GB'a kadar veritabanı için — 2–6 saat. Trickle ile terabayt boyutundaki diziler için — paralel senkronizasyonla birkaç günden haftalara kadar.
Ana araçlar: CDC için AWS DMS, Azure Data Factory, Debezium, şema taşımaları için Flyway ve Liquibase, ETL boru hatları için Apache NiFi. Seçim, kaynak türüne ve hedef platforma bağlıdır.
Hedef sisteme yazmayı derhal durdurun, geri alma planına göre kaynağa geçin ve verileri yedekten geri yükleyin. Hatayı analiz ettikten sonra test taşımasını tekrarlayın. Geri alma planı başlangıçtan önce hazır olmalıdır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun