양방향 데이터 동기화를위한 모범 사례 / 패턴


52

제 작품에서 데이터베이스 시스템 간의 양방향 데이터 동기화라는 아이디어가 자주 발생합니다. 전형적인 예는 두 개의 약간 다른 CRM 시스템 (예 : Raiser 's Edge와 Salesforce)이며 서로간에 연락처 데이터를 양방향으로 동기화해야합니다.

API 고려 사항을 제외하고 동기화 할 공유 키가 있고 순수하게 알고리즘 / 패턴을 사용한다고 가정 할 때 이는 비 기술자들이 종종 과소 평가하는 작업입니다.

예를 들어 다음을주의해야합니다.

  • 두 시스템에서 변경된 레코드를 쉽게 감지 할 수 있습니까 (또는 변경 사항을 감지하기 위해 시스템 간의 모든 레코드를 비교해야 함)
  • N 시간마다 한 번 동기화하려는 경우 두 시스템에서 동일한 레코드가 거의 동시에 변경되는 충돌을 처리하는 방법
  • 실시간 동기화를 수행하려는 경우 (즉, 한 시스템의 업데이트가 즉시 다른 시스템에 대한 업데이트를 트리거하는 경우) 버그 또는 시스템 충돌로 인한 시간의 차이를 처리하는 방법

개인적으로 나는이 모든 것을 다룰 수있는 방법을 생각할 수 있지만 내가 참조 할 수있는 잘 알려진 패턴, 문헌 또는 모범 사례가 있는지 궁금합니다.


페더 레이 티드 데이터베이스 시스템과 매우 유사한 사운드를 설명 하는 것이 맞습니까?
gnat

@ gnat : 링크 덕분에 우려 사항 중 일부는 유사합니다 (예 : 이질성 처리).하지만 두 개의 자치 데이터베이스에서 데이터의 하위 집합을 동기화하는 것에 대해 이야기하고 있지만 모든 것에 대한 완전히 통합 된보기를 만드는 것에 대한 것 같습니다 여러 db에 걸쳐.
codeulike

1
7 년 후 50 개의 공감대가 있었지만 1 개의 대답 만 있었다. 동기화 패턴이나 모범 사례가 있어야합니까?
codeulike

답변:


8

예, 어려운 문제이며 쉽게 과소 평가되었습니다. 그리고 많은 일이 될 수 있습니다. Microsoft 기술을 사용하는 경우 여기여기 에서 Microsoft Sync Framework를 살펴볼 수 있습니다 .


1
고마워요. Ms Sync Framework에 대해 들었지만 그것이 너무 일반화되었다는 것을 깨닫지 못했습니다. 기본적으로 동기화 문제를 처리하기위한 패턴입니다.
codeulike

2
Microsoft Sync Framework는 Microsoft Sync Framework Toolkit으로 대체되었습니다.
Tomas Kubes

특히 비 SQL Server ADO.NET 데이터 공급자에 대한 문서가 마음에 들지 않습니다. 또한 제 직장은 인프라 환경을 추가하거나 프로덕션 환경을 변경할 필요가없는 것을 찾고 있습니다. 그래서 나는 이것을 폐기하려고합니다.
Veverke

0

원격 사이트 DB 동기화에 대한 많은 이론이 있습니다. 먼저 INSERT로 시작하십시오. 모든 사이트에 대해 고유 한 ID를 만들 수 있으므로 (예 : 사이트 이름의 초기 + ID (번호) : site_a_177 vs. site_b_53)

따라서 insert는 충돌을 일으키지 않아야합니다. 문제는 업데이트입니다. 100 % 실패 방지 방법이 있다고 생각하지는 않지만 원격 DB에서 레코드를 "잠그면"업데이트를 시작할 수 있으며 핸들을 얻은 후에 만 ​​업데이트를 계속하고 업데이트를 동기화하여 완료하십시오. 그런 다음에 만 잠금을 해제하십시오.


1
감사합니다. 동일한 스키마로 분산 데이터베이스에 대해 이야기하고 분산 트랜잭션을 처리한다고 생각합니다. 두 DB가 완전히 자율적 인 시나리오 (예 : 완전히 다른 방식으로 고유 ID를 할당하고 스키마가 다름)의 시나리오를 더 많이 생각하고 있지만 데이터의 하위 집합을 동기화하려고합니다.
codeulike

충돌이 없어야하는 것처럼 들립니다. 이 경우에는 매우 간단해야합니다. 각 테이블에 대해 동기화 된 "마지막 레코드 ID"를 저장 한 다음 계속하십시오.
alfasin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.