İki yönlü veri senkronizasyonu için en iyi yöntem / Kalıp


52

İşimde oldukça sık, veritabanı sistemleri arasında 2 yönlü veri senkronizasyonu fikri ortaya çıkıyor. Klasik örnek iki farklı CRM sistemidir (Raiser's Edge ve Salesforce) ve bunlar arasında iki yönlü bir Temas verisi senkronizasyonuna ihtiyaç vardır.

API ile ilgili düşünceler bir yana, senkronize edilmek üzere paylaşılan bir anahtarınızın olduğunu varsaymak ve yalnızca kullanılacak algoritmayı / kalıbı düşünmek olarak düşünülürse, bu genellikle teknik olmayan kişiler tarafından göz ardı edilen bir iştir.

Örneğin, dikkat etmeniz gerekenler:

  • Her iki sistemde hangi kayıtların değiştiğini kolayca tespit edebiliyor musunuz (veya değişiklikleri tespit etmek için sistemler arasındaki tüm kayıtları karşılaştırmanız gerekecek)
  • Her N-saatte bir senkronizasyona gidiyorsanız, aynı kaydın her iki sistemde de aynı anda değiştiği çatışmalarla nasıl başa çıkabilirsiniz?
  • Gerçek zamanlı bir senkronizasyona gidiyorsanız (yani bir sistemdeki bir güncelleme hemen diğer sisteme bir güncellemeyi tetikler), hatalar veya sistem çökmelerine bağlı olarak zaman içinde farklılığın nasıl ele alınacağı

Şahsen bunların hepsini çözmenin yollarını düşünebilirim ama iyi bilinen bir kalıp, literatür veya başvurabileceğim en iyi uygulamalar olup olmadığını merak ediyorum.


Federasyon veritabanı sistemine oldukça yakın sesler tanımladığınız - doğru mu?
gnat

@gnat: Bağlantı için teşekkürler, endişelerden bazıları benzer (örneğin, heterojenlik ile başa çıkmak), ancak ben iki özerk veritabanından bir veri alt kümesini senkronize etmekten bahsediyorum, oysa bu, her şeyin tamamen entegre bir görüntüsünü oluşturmaktan daha fazlası gibi görünüyor çoklu dbs arasında.
kodulike

1
7 yıl sonra, 50 artı ancak sadece 1 iyi cevap. Bazı senkronizasyon şekilleri veya orada en iyi uygulamalar olmalı mı?
14:56

Yanıtlar:


8

Evet, zor bir problem, kolayca hafife alınabilir. Ve çok fazla iş olabilir. Microsoft teknolojilerindeyseniz, burada ve burada Microsoft Sync Framework’e bir göz atmak isteyebilirsiniz .


1
Teşekkürler, bu ilginç. Ms Eşitleme Çerçevesini duymuştum ancak bunun çok genel olduğunu fark etmemiştim. Temel olarak, senkronizasyon sorunlarını genel olarak ele almak için kullanılan bir kalıptır.
kodulike

2
Microsoft Sync Framework, Microsoft Sync Framework Araç Takımı ile değiştirildi.
Tomas Kubes

Özellikle benim durumum olmayan SQL-Server ADO.NET veri sağlayıcıları için bu kadar net olmayan belgelerle sinirliyim. Ayrıca iş yerim, altyapı ortamları eklemek / Üretim ortamında değişiklik yapmak gerektirmeyen bir şey arıyor. Yani bunu atmak üzereyim.
Veverke

0

Uzak site DB senkronizasyonu hakkında birçok teori vardır. İlk önce INSERT ile başlayın. bunu kullanmak kolaydır - her site için benzersiz bir kimlik oluşturabildiğiniz için (örneğin, site adının + ID'sinin (sayı) bir başlangıcı: site_a_177 vs. site_b_53)

Bu yüzden insert herhangi bir çatışma yaratmamalıdır. sorun güncelleme. % 100 hataya dayanıklı bir yöntem olduğuna inanmıyorum, ancak uzak DB'deki kaydı "kilitleyerek" bir güncelleme başlatabilirsiniz ve yalnızca tanıtıcıyı aldıktan sonra - güncellemeye devam edin ve güncellemeyi senkronize ederek tamamlayın ve ancak o zaman kilidi açın.


1
Teşekkürler, bence aynı şemaya sahip dağıtılmış dbs hakkında konuşuyorsunuz ve dağıtık işlemlerle uğraşıyorsunuz. İki DB'nin tamamen özerk olduğu senaryoları daha fazla düşünüyorum (örneğin, tamamen farklı şekillerde benzersiz kimlikler atarlar ve şemalar farklıdır), ancak içindeki verilerin alt kümesini senkronize etmek istiyorsunuz.
kodulike

Herhangi bir çatışma olmamalıdır gibi geliyor. Bu durumda çok basit olmalı - sadece her tablo için senkronize edilmiş “son kayıt kimliğini” kaydedin ve oradan devam edin.
alfasin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.