중앙 서버와 d1, d2, d3, d4, d5와 같은 여러 지역 서버가 있습니다.
복사할 테이블이 몇 개 있습니다. 단순화를 위해 d1, d2, d3, d4, d5 및 c에 존재하고 모든 서버에서 동일한 구조를 갖는 tblFoo라는 테이블이 있다고 가정해 보겠습니다. 규칙은 간단합니다:
d 서버에서 tblFoo에 변경 사항(삽입, 업데이트, 삭제)이 발생하면 C 서버에서도 즉시 변경되도록 하는 것이 목표입니다. 이는 삽입 작업에 매우 효과적입니다(pkFooID인 ID에는 정의에 따라 auto_increment 속성이 있기 때문입니다). 이는 업데이트 및 삭제 작업에도 적용되지만 이러한 작업에는 몇 가지 우려 사항이 있습니다. 코드는 다음과 같습니다(간단한 버전):
으아아아걱정해야 할 문제는 : 다른 지역 서버(d2, d3, d4, d5)에서 조건을 충족할 수 있는 d1에서 업데이트 또는 삭제 문을 실행하면 업데이트 및 삭제 문이 d1에서 올바르게 실행된다는 것입니다. , 그러나 d1에서 동일한 명령문이 실행되면 실수로 c 서버의 다른 지역에 있는 레코드를 업데이트/삭제할 수 있습니다.
이 문제를 해결하려면 문을 검증하고 다음 조건 중 하나가 충족되지 않으면 예외를 발생시키는 것이 좋습니다.
복제 동작이 없는 테이블은 정상적으로 실행됩니다. 위의 제한 사항은 이 예의 tblFoo와 같은 복제 동작이 있는 테이블에만 적용됩니다.
기본 또는 외래 키만 검색할 수 있고 = 또는 IN 연산자만 사용할 수 있도록 재작성 실행에서 업데이트/삭제 쿼리를 어떻게 검증할 수 있나요?
이것이 제가 문제를 해결한 방법입니다.
복사 동작이 있는 모델은 다음 검증을 수행합니다.
으아아아조건이 올바르게 검증되도록
으아아아Query
类,我们有一个isReplicate
方法,触发我们需要的验证,where
메서드가 재정의되었습니다.