Cukup sering dalam pekerjaan saya gagasan sinkronisasi data 2 arah antara sistem database muncul. Contoh klasik adalah dua sistem CRM yang sedikit berbeda (katakanlah, Raiser's Edge dan Salesforce) dan kebutuhan untuk memiliki sinkronisasi dua arah data Kontak di antara mereka.
Selain pertimbangan API, dengan anggapan Anda memiliki kunci bersama untuk disinkronkan, dan murni memikirkan algoritma / pola yang akan digunakan, ini adalah tugas yang sering dianggap remeh oleh non-teknologi.
Misalnya, Anda harus berhati-hati untuk:
- Dapatkah Anda dengan mudah mendeteksi catatan mana yang telah berubah di kedua sistem (atau apakah Anda harus membandingkan semua catatan antara sistem untuk mendeteksi perubahan)
- Jika Anda pergi untuk sinkronisasi sekali-setiap-N-jam, bagaimana menangani konflik di mana catatan yang sama berubah pada waktu yang kurang lebih sama pada kedua sistem
- Jika Anda pergi untuk sinkronisasi waktu-nyata (yaitu pembaruan dalam satu sistem segera memicu pembaruan ke sistem lain) bagaimana menangani perbedaan dari waktu ke waktu karena bug atau sistem crash
Secara pribadi saya bisa memikirkan cara untuk mengatasi semua ini, tetapi saya bertanya-tanya apakah ada pola, literatur, atau praktik terbaik yang bisa saya lihat.
design-patterns
algorithms
database-development
synchronization
seperti kode
sumber
sumber
Jawaban:
Ya, masalah yang sulit, mudah diremehkan. Dan bisa jadi banyak pekerjaan. Jika Anda menggunakan teknologi Microsoft, Anda mungkin ingin melihat Microsoft Sync Framework di sini dan di sini .
sumber
Ada banyak teori tentang sinkronisasi DB situs jarak jauh. Pertama mulai dengan INSERT. menangani yang ini mudah - karena Anda dapat membuat ID unik untuk setiap situs (misalnya inisial nama situs + ID (nomor): site_a_177 vs. site_b_53)
Jadi masukkan tidak boleh membuat konflik. masalahnya adalah pembaruan. Saya tidak percaya bahwa ada metode bukti kegagalan 100%, tetapi Anda dapat memulai pembaruan dengan "mengunci" catatan di DB jarak jauh, dan hanya setelah Anda mendapatkan pegangan - lanjutkan dengan pembaruan, dan selesaikan dengan menyinkronkan pembaruan dan baru kemudian lepaskan kunci.
sumber