programing

내 SQL 복제에 즉각적인 데이터 일관성이 있습니까?

minimums 2023. 10. 30. 20:51
반응형

내 SQL 복제에 즉각적인 데이터 일관성이 있습니까?

저는 현재 프로젝트에 대한 noSQL 솔루션을 고려하고 있지만, 이들 데이터베이스 중 많은 부분에서 '최종 일관성' 조항에 대해 주저하고 있습니다.복제가 지연되는 mySQL 데이터베이스를 처리하는 것과 궁극적으로 일관성이 다른가요?복제 지연과 관련하여 과거에 사용했던 한 가지 솔루션은 즉각적인 데이터 일관성이 필요할 때 마스터에서 읽어오는 것입니다.

그런데 왜 관계형 데이터베이스가 강력한 데이터 일관성을 가지고 있다고 주장하는지 혼란스럽습니다.저는 거래를 이용해야 한다고 생각하는데 그렇게 하면 일관성이 강해질 것 같습니다.그렇다면 SQL 복제가 지연될 수 있다고 가정하고 애플리케이션을 작성하는 것이 좋은 방법입니까?

ACID에 사용된다는 의미에서 일관성이 있다는 것은 모든 제약 조건이 변경 전후에 충족된다는 것을 의미합니다.시스템이 일관성 없는 데이터를 읽을 수 없다고 보장하는 경우, 예를 들어 자식 행이 존재하지 않는 부모 행을 참조하는 경우에는 절대로 데이터를 읽지 않을 것이라고 말합니다.또는 거래의 절반은 적용되었지만 나머지 절반은 아직 적용되지 않은 경우(교과서적인 예는 한 은행 계좌의 대변인이지만 수취인 은행 계좌는 아직 대변인을 받지 않은 경우).

MySQL의 복제는 기본적으로 비동기식이거나 기껏해야 "반동기식"입니다.확실히 어느 경우든 시간이 늦습니다.실제로 복제 복제본은 트랜잭션이 커밋될 때까지 마스터가 이진 로그에 변경사항을 기록하지 않기 때문에 항상 최소 1초 이상 지연됩니다. 그러면 복제본은 이진 로그를 다운로드하고 이벤트를 중계해야 합니다.

하지만 변화는 여전히 원자적입니다.부분적으로 변경된 데이터는 읽을 수 없습니다.커밋된 변경사항(모든 제약조건이 충족되는 경우)을 읽거나, 그렇지 않으면 트랜잭션이 시작되기 전의 데이터 상태를 볼 수 있습니다.

따라서 복제 시스템에서 지연된 오래된 데이터를 일시적으로 읽을 수는 있지만 일관되지 않은 데이터를 읽지는 않습니다.

반면에 "결국 일관된" 시스템에서는 한 계정은 데빗되었지만 두 번째 계정은 아직 크레딧에 포함되지 않은 부분적으로 업데이트된 데이터를 읽을 수 있습니다.따라서 일관되지 않은 데이터를 볼 수 있습니다.

응용프로그램에 최신 데이터가 필요한 경우 복제본에서 읽는 것에 주의해야 할 수 있습니다.각 애플리케이션마다 복제 지연에 대한 허용오차가 다르며, 실제로 한 애플리케이션 내에서 서로 다른 쿼리마다 지연에 대한 허용오차가 다릅니다.MySQL PHP를 위한 읽기/쓰기 분할(Percona webinar 2013)에 대한 발표를 하였습니다.

완성도를 위해 CAP 정리 관점으로 질문에 답하겠습니다.아 그리고 ACID에서의 정합성은 CAP에서의 정합성과 같지 않습니다.

모든 읽기가 가장 최근의 쓰기 또는 오류를 수신한다는 CAP 정리의 일관성(이것을 선형화 가능성, 강한 일관성이라고 함)의 관점에서 MySQL은 비동기 복제를 사용하기 때문에 기본적으로 강력하게 일관되지 않습니다.따라서 그룹의 일부 노드는 가장 최근에 기록한 반면 일부 노드는 아직 기록하지 않은 기간이 있습니다.

또한 MySQL 버전이 8.0.14 이상이면 group_replication_consistency를 구성할 수 있지만 여전히 기본값은 UTENTAL입니다(이것은 구성할 수 없으며 대부분의 앱에서 실행되는 이전 MySQL 버전에서는 기본값입니다).상세정보 : https://dev.mysql.com/doc/refman/8.0/en/group-replication-configuring-consistency-guarantees.html

또한 MySQL Cluster를 사용하는 경우(다른 제품/기술이지만 클러스터라고 부르는 것이 혼란스럽기 때문에), MySQL 문서 자체는 최종적인 일관성만 보장한다고 말합니다.상세정보 : https://dev.mysql.com/doc/mysql-cluster-manager/1.4/en/mcm-eventual-consistency.html

따라서 우리는 그것이 결국 일관된 시스템이라고 해도 무방합니다.그리고 비동기적으로 복제되는 모든 시스템은 결국 정의에 따라 일관성을 유지합니다.

언급URL : https://stackoverflow.com/questions/25690976/does-mysql-replication-have-immediate-data-consistency

반응형