이것은 인터뷰 질문입니다. 일반적인 생각은 데이터베이스가 마스터-슬레이브 방법을 사용한다는 것입니다. 트랜잭션에 읽기와 쓰기가 모두 포함되는 경우(읽기 및 쓰기 작업이 여러 번 수행됨) 데이터베이스 마스터-슬레이브 읽기 및 쓰기는 동일한 프로세스에서 이루어집니다. (쓰기는 메인 라이브러리에, 읽기는 슬레이브 라이브러리에 하기 때문에, 동일한 프로세스에서 방금 쓴 데이터가 제때에 슬레이브 라이브러리에 동기화되지 않았을 가능성이 있습니다. ), 그러나 거래에서 이러한 문제가 발생할지 여부에 대한 이 질문의 강조점을 잘 이해하지 못합니다. 어떤 새로운 문제가 발생하며, 발생할 경우 어떻게 해결합니까?
마스터-슬레이브 라이브러리를 별도로 읽고 쓰는 것과 동일한 프로세스가 트랜잭션 관련 문제가 되어서는 안 되겠죠? 동일한 트랜잭션은 데이터베이스 간을 지원하지 않기 때문에 내가 아는 한 "마스터-슬레이브 트랜잭션"과 같은 것은 없지만 일부 라이브러리의 구현이며 데이터베이스와 관련이 없습니다. . 동일한 프로세스인지 아닌지에 관계없이 데이터 동기화가 시기 적절하지 않은 문제가 발생할 수 있습니다.
읽기 작업과 쓰기 작업이 모두 있는 트랜잭션에는 아무런 문제가 없습니다. 트랜잭션이 모두 읽기 작업이거나 모두 쓰기 작업일 수만 있다는 것이 합리적입니까? 문제는 이 경우 동시성 중에 데이터의 일관성을 보장하기 위해 비관적 잠금과 같은 잠금을 사용해야 한다는 것입니다. 즉, 현재 트랜잭션에서 읽고 있는 데이터가 다른 트랜잭션에서 읽혀지지 않도록 보장하고, 잠금이 해제되기 전에 트랜잭션 실행이 데이터 쓰기를 완료할 때까지 기다려야 합니다. 그렇지 않으면 데이터 혼란이 발생합니다. 예: 숫자 10, 두 트랜잭션은 잠금 없이 병렬로 10을 읽고 쓰기 전에 10을 추가합니다. 이때 두 트랜잭션 모두 20을 쓰는데 우리는 그것이 30이 되기를 바랍니다. 나는 이 면접 질문이 이 점에 대해 당신을 시험해 봐야 한다고 생각합니다.