작업 시나리오
DTS는 다대일, 일대다, 계단식 단방향, 양방향 및 계단식 양방향 동기화를 비롯한 복잡한 토폴로지 구조를 지원합니다. 이러한 구조에서는 데이터가 동시에 여러 노드에 쓰여지기 때문에 기본 키 충돌이 발생할 수 있습니다. 이 문제를 해결하기 위해 DTS는 기본 키 충돌을 감지하고 다음 해결 정책을 제공합니다.
|
| 동기화 작업 중에 원본 데이터베이스의 INSERT 문에 대상 데이터베이스의 데이터와 기본 키 충돌이 있는 경우 작업은 오류를 보고하고 일시 중지합니다. 계속하기 전에 먼저 수동으로 충돌을 처리해야 합니다. | 작업이 오류를 보고하고 SQL 문이 재작성되지 않습니다. |
| 동기화 작업 중에 원본 데이터베이스의 INSERT 문에 대상 데이터베이스의 데이터와 기본 키 충돌이 있는 경우 원본 데이터베이스에 삽입된 데이터는 무시되고 대상 데이터베이스의 데이터가 우선합니다. | INSERT 문에 기본 키 충돌이 있는 경우 INSERT는 INSERT IGNORE로 재작성됩니다. |
| 동기화 작업 중에 INSERT 또는 UPDATE 문에 대상 데이터베이스의 데이터와 기본 키 충돌이 있는 경우 대상 데이터베이스의 데이터는 원본 데이터베이스의 삽입 또는 업데이트된 데이터로 덮어씁니다. | INSERT 또는 UPDATE 문에 기본 키 충돌이 있는 경우 INSERT 또는 UPDATE는 각각 REPLACE INTO 또는 DELETE + REPLACE INTO로 재작성됩니다. |
충돌 정책 시나리오 예시
기본 키 충돌 해결 정책은 INSERT 및 UPDATE 기본 키 충돌에만 적용되지만 충돌하지 않는 시나리오에는 적용되지 않습니다. 정책이 적용된 후 작업은 오류를 보고하거나 충돌이 발생하면 계속 진행할 수 있습니다. 다음은 서로 다른 정책에 따른 결과가 있는 두 가지 기본 키 충돌 시나리오의 예시입니다.
기본 키 충돌 INSERT
ID를 기본 키로 사용하는 A > B 단방향 동기화가 생성됩니다. A의 INSERT 문이 데이터 동기화 중에 B의 데이터와 기본 키 충돌이 있는 경우 DTS는 구성된 충돌 해결 정책에 따라 충돌을 처리합니다.
서로 다른 정책에 따라 B의 각 동기화 결과는 아래와 같습니다.
충돌 보고: 작업에서 오류를 보고하고 B의 데이터는 변경되지 않은 상태로 유지됩니다(ID=1, Price=10).
충동 무시: 작업은 A의 기본 키가 동일한 데이터를 무시하고 B의 데이터는 변경되지 않은 상태로 유지됩니다(ID=1, Price=10).
충돌 덮어쓰기: 작업은 B의 데이터를 A의 동일한 기본 키를 가진 데이터로 덮어쓰고 B의 데이터는 (ID=1, Price=20)이 됩니다.
기본 키 충돌 UPDATE
일부 시나리오에서는 기본 키를 수정하여 기본 키 충돌을 일으킬 수 있습니다. 예를 들어 A의 기본 키가 UPDATE되고(ID=1 -> ID=2), 기본 키 ID가 B의 2인 데이터와 충돌합니다.
서로 다른 정책에 따라 B의 각 동기화 결과는 아래와 같습니다.
충돌 보고: 작업에서 오류를 보고하고 B의 데이터는 변경되지 않은 상태로 유지됩니다.
충돌 무시: 작업에서 오류를 보고하고 B의 데이터는 변경되지 않은 상태로 유지됩니다. DTS는 이 경우 충돌을 무시합니다.
충돌 덮어쓰기: 작업이 B의 데이터를 A의 동일한 기본 키를 가진 데이터로 덮어쓰고 기본 키가 2인 데이터만 B에 존재합니다(ID=2, Price=10).
충돌 해결 정책 및 데이터 일관성
2리전 3데이터센터 및 다중 사이트 활성-활성 아키텍처와 같은 복잡한 데이터 아키텍처에서 데이터는 동시에 3개 이상의 노드에 기록되어야 할 수 있으며 여러 노드에서 데이터 일관성을 보장하는 것이 중요합니다. 많은 사용자는 기본 키 충돌 해결 정책을 사용하여 지정된 노드의 데이터를 다른 노드와 동기화할 수 있다고 생각하지만 실제로는 작동하지 않습니다.
다음 양방향 동기화 시나리오에서 덮어쓰기 정책은 A > B 및 B > A 동기화 모두에 대해 설정됩니다. 기본 키가 1인 다른 데이터 레코드가 노드 A와 B에 동시에 삽입되면 결국 A와 B 사이에서 서로 교환됩니다.
실제 시나리오에서 노드 간에 데이터 일관성을 구현하려면 일반적으로 기본 키로 데이터베이스를 분할하고, 버전 번호로 데이터 덮어쓰기와 같은 추가 조정 메커니즘을 도입하고, 충돌 해결 정책 외에 다른 방법을 사용해야 합니다.