직렬화 가능성Serializability

이상적으로는 트랜잭션을 직렬화할 수 있어야 합니다.Ideally, transactions should be serializable. 트랜잭션이 동시에 실행 된 결과와 동일 하 게 실행 되는 경우 트랜잭션을 직렬화 할 수 있는 것으로 간주 합니다. 즉, 트랜잭션을 차례로 실행 한 결과와 동일 합니다.Transactions are said to be serializable if the results of running transactions simultaneously are the same as the results of running them serially - that is, one after the other. 트랜잭션이 먼저 실행 되는 것은 중요 하지 않으며 결과가 트랜잭션 혼합을 반영 하지 않습니다.It is not important which transaction executes first, only that the result does not reflect any mixing of the transactions.

예를 들어 트랜잭션 A가 데이터 값을 2로 곱하고 트랜잭션 B가 데이터 값에 1을 추가 한다고 가정 합니다.For example, suppose transaction A multiplies data values by 2 and transaction B adds 1 to data values. 이제 0과 10 이라는 두 가지 데이터 값이 있다고 가정 합니다.Now suppose that there are two data values: 0 and 10. 이러한 트랜잭션이 다른 트랜잭션에서 실행 되는 경우 새 값은 1과 21 (트랜잭션 A가 먼저 실행 되는 경우), 2, 22 (트랜잭션 B가 먼저 실행 되는 경우)가 됩니다.If these transactions are run one after the other, the new values will be 1 and 21 if transaction A is run first, or 2 and 22 if transaction B is run first. 그러나 두 트랜잭션이 실행 되는 순서는 각 값 마다 다를 수 있습니다.But what if the order in which the two transactions are run is different for each value? 첫 번째 값에서 트랜잭션 A를 먼저 실행 하 고 두 번째 값에서 트랜잭션 B를 먼저 실행 하는 경우 새 값은 1과 22입니다.If transaction A is run first on the first value and transaction B is run first on the second value, the new values are 1 and 22. 이 순서를 반대로 하는 경우 새 값은 2 및 21입니다.If this order is reversed, the new values are 2 and 21. 1, 21 및 2, 22 인 경우에만 트랜잭션을 직렬화 할 수 있습니다.The transactions are serializable if 1, 21 and 2, 22 are the only possible results. 1, 22 또는 2 인 경우 트랜잭션을 직렬화 할 수 없습니다.The transactions are not serializable if 1, 22 or 2, 21 is a possible result.

순차성 바람직한 이유는 무엇 인가요?So why is serializability desirable? 즉, 다음 트랜잭션이 시작 되기 전에 하나의 트랜잭션이 완료 되는 것이 중요 한 이유는 무엇 인가요?In other words, why is it important that it appears that one transaction finishes before the next transaction starts? 다음 문제를 고려 하십시오.Consider the following problem. 외판원는 주문이 청구서를 전송 하는 동시에 주문을 입력 합니다.A salesman is entering orders at the same time a clerk is sending out bills. 외판원가 회사 X에서 주문을 입력 하지만 커밋하지 않는 경우를 가정 합니다. 외판원는 여전히 회사 X에서 담당자와 통신 하 고 있습니다. 이 클럭은 모든 오픈 주문의 목록을 요청 하 고 회사 X에 대 한 주문을 검색 한 후 청구서를 보냅니다.Suppose the salesman enters an order from Company X but does not commit it; the salesman is still talking to the representative from Company X. The clerk requests a list of all open orders and discovers the order for Company X and sends them a bill. 이제 회사 X의 담당자가 주문을 변경 하기로 결정 하므로 트랜잭션을 커밋하기 전에 외판원 변경 됩니다.Now the representative from Company X decides they want to change their order, so the salesman changes it before committing the transaction. 회사 X에서 잘못 된 청구서를 가져옵니다.Company X gets an incorrect bill.

외판원의 및 클럭 트랜잭션이 serializable 인 경우이 문제가 발생 하지 않습니다.If the salesman's and clerk's transactions were serializable, this problem would never have occurred. 외판원의 트랜잭션이 시작 된 후에는 클럭 트랜잭션이 시작 되기 때문에,이 경우에는 클럭이 올바른 청구서를 전송 하거나, 외판원의 트랜잭션이 시작 되기 전에 클럭의 트랜잭션이 완료 될 수 있습니다 .이 경우에는 클럭이 회사 X로 청구서를 전송 하지 않습니다.Either the salesman's transaction would have finished before the clerk's transaction started, in which case the clerk would have sent out the correct bill, or the clerk's transaction would have finished before the salesman's transaction started, in which case the clerk would not have sent a bill to Company X at all.