다음을 통해 공유


직렬화 가능성

이상적으로 트랜잭션을 직렬화할 수 있어야 합니다. 트랜잭션을 동시에 실행한 결과가 트랜잭션을 직렬로 실행한 결과와 같으면 즉, 트랜잭션을 직렬화할 수 있다고 합니다. 어떤 트랜잭션이 먼저 실행되는지는 중요하지 않으며, 결과가 트랜잭션의 혼합을 반영하지 않는다는 점만 중요합니다.

예를 들어 트랜잭션 A가 데이터 값을 2로 곱하고 트랜잭션 B가 데이터 값에 1을 추가한다고 가정합니다. 이제 0과 10이라는 두 개의 데이터 값이 있다고 가정합니다. 이러한 트랜잭션이 하나씩 실행되는 경우 트랜잭션 A가 먼저 실행되면 새 값은 1과 21, 트랜잭션 B가 먼저 실행되면 2와 22가 됩니다. 그러나 두 트랜잭션이 실행되는 순서가 각 값에 대해 다르면 어떻게 될까요? 트랜잭션 A가 첫 번째 값에서 먼저 실행되고 트랜잭션 B가 두 번째 값에서 먼저 실행되는 경우 새 값은 1과 22입니다. 이 순서가 취소되면 새 값은 2와 21입니다. 1, 21 및 2, 22가 가능한 유일한 결과인 경우 트랜잭션을 직렬화할 수 있습니다. 1, 22 또는 2, 21이 가능한 결과인 경우 트랜잭션을 직렬화할 수 없습니다.

그렇다면 직렬화가 바람직한 이유는 무엇일까요? 즉, 다음 트랜잭션이 시작되기 전에 하나의 트랜잭션이 완료되는 것처럼 보이는 것이 중요한 이유는 무엇인가요? 다음 문제를 고려합니다. 영업 사원이 청구서를 보내는 동시에 주문을 입력합니다. Salesman이 회사 X에서 주문을 입력하지만 커밋하지 않는다고 가정합니다. 영업 사원은 여전히 X사 담당자와 대화하고 있습니다. 점원은 모든 미결 주문 목록을 요청하고 X 회사의 주문을 검색하여 청구서를 보냅니다. 이제 X사 담당자가 주문을 변경하기로 결정하므로 영업 사원이 트랜잭션을 커밋하기 전에 변경합니다. 회사 X는 잘못된 청구서를 받습니다.

영업 사원과 서기의 트랜잭션을 직렬화할 수 있다면 이 문제는 발생하지 않았을 것입니다. 영업 사원의 거래는 서기의 거래가 시작되기 전에 완료되었을 것이며, 이 경우 서기가 올바른 청구서를 보냈거나 영업 사원의 거래가 시작되기 전에 서기의 거래가 끝났을 것이며, 이 경우 서기는 X 회사에게 청구서를 전혀 보내지 않았을 것입니다.