Tamamen farklı yapılara sahip iki büyük veritabanı arasında veri senkronizasyonu uygulamak zorundayım. Temel olarak, ilk veri tabanındaki farklı tablolardaki ürünlerle ilgili bazı verileri toplayıp, ikinci veri tabanındaki diğer tablolar için bunları yeniden düzenlemem gerekiyor.
Ürünlerimi ilk kez yaratmak çok karmaşık değil. Ancak her ürünle ilgili belirli verileri (tüm verileri değil) güncellemenin bir yolunu arıyorum.
Açıkçası, bunu zorlaştıran birkaç sorun var.
- Seçme sorguları dışında kaynak veritabanında hiçbir şey yapmama izin verilmiyor.
- Hedef veritabanında olağan sorguları yapabilirim (seç, güncelle, ekle, oluştur) ancak mevcut yapı / tabloları değiştiremiyorum.
- Hedef ve kaynak db tamamen farklı yapılara sahip, tablolar hiç aynı değil, bu nedenle verilerin gerçekten yeniden düzenlenmesi gerekiyor - karşılaştırma tabloları çalışmaz.
- Hedef veritabanı bir MySQL sunucusu kullanıyor - kaynak DB2 olabilir.
- Hiçbir yerde "güncellenmiş zaman" alanı yok.
Bu yüzden, tüm işlem tek bir Python (ideal olarak) komut dosyasında yapılmalıdır.
Hedef veritabanında güncellenecek alanlara bağlı olarak her ürün için bir karma oluşturmayı düşünüyorum: md5 (kod + açıklama + tedarikçi + yaklaşık 10 diğer alan). Aynı veriye dayalı yeni bir karma, kaynak veritabanından günlük olarak oluşturulacaktır. Performansları için tüm karmaları tek bir tabloda (kalem kodu, current_hash, old_hash) saklayacağım. Ardından, yeni karma eskisinden farklıysa, ürünü karşılaştırın ve güncelleyin.
Yaklaşık 500.000 ürün var, bu yüzden performansları hakkında biraz endişeliyim.
Gitmek için iyi bir yol mu?