1.7. 거래 서비스 특성 정보
거래 시스템을 구현하는 제품을 선택할 때 다양한 데이터베이스 제품과 거래 관리자, 무료 및 일부 상용이 있습니다. 모두 트랜잭션 처리에 대한 일반 지원이 있지만 이러한 제품에 의해 지원되는 서비스의 특성에는 상당한 차이가 있습니다. 이 섹션에서는 서로 다른 트랜잭션 제품의 안정성과 세분화를 비교할 때 고려해야 할 기능에 대한 간략한 가이드를 제공합니다.
1.7.1. 리소스에서 제공하는 서비스의 특성
다음 기능에 따라 리소스의 서비스 품질이 결정됩니다.
1.7.1.1. 트랜잭션 격리 수준
ANSI SQL은 다음과 같이 네 가지 트랜잭션 격리 수준을 정의합니다.
직렬화 가능
- 트랜잭션이 서로 완벽하게 격리됩니다. 즉, 트랜잭션이 커밋될 때까지 하나의 트랜잭션이 다른 트랜잭션에 영향을 미칠 수 없습니다. 이 격리 수준은 모든 트랜잭션이 다른 트랜잭션 후 실행되는 것처럼 이므로 직렬화 가능 으로 설명됩니다(실제로 리소스는 일부 트랜잭션이 동시에 진행할 수 있도록 종종 알고리즘을 최적화할 수 있음).
REPEATABLE_READ
-
트랜잭션이 데이터베이스를 읽거나 업데이트할 때마다 트랜잭션이 종료될 때까지 읽기 또는 쓰기 잠금을 확보하고 유지됩니다. 이는 거의 완벽한 격리를 제공합니다. 그러나 격리가 완전하지 않은 한 가지 사례가 있습니다. a Cryostat 절을 사용하여 행 범위를 읽는 SQL
SELECT
문을 고려하십시오.다른 트랜잭션이 첫 번째 트랜잭션이 실행 중인 동안 이 범위에 행을 추가하는 경우 첫 번째 트랜잭션에서 새 행을 볼 수 있습니다.If another transaction adds a row to this range while the first transaction is running, the first transaction can see this new row, if it repeats the
SELECT
call (a phantom read). READ_COMMITTED
- 쓰기 잠금은 트랜잭션이 종료될 때까지 유지됩니다. 읽기 잠금은 트랜잭션이 종료될 때까지 유지되지 않습니다. 결과적으로 다른 트랜잭션에서 커밋한 업데이트가 진행중인 트랜잭션에 표시되므로 반복된 읽기가 다른 결과를 제공할 수 있습니다.Consequently, repeated reads can give different results because updates committed by other transactions become visible to an ongoing transaction.
READ_UNCOMMITTED
- 읽기 잠금 또는 쓰기 잠금은 트랜잭션이 종료될 때까지 유지되지 않습니다. 따라서 더티 읽기가 가능합니다. 더티 준비는 다른 트랜잭션에 의해 커밋되지 않은 변경 사항이 진행 중인 트랜잭션에 표시되는 경우입니다.
일반적으로 데이터베이스는 다양한 트랜잭션 격리 수준을 모두 지원하지 않습니다. 예를 들어 일부 무료 데이터베이스는 READ_UNCOMMITTED
만 지원합니다. 또한 일부 데이터베이스는 ANSI 표준과 하위 다른 방식으로 트랜잭션 격리 수준을 구현합니다. 격리는 데이터베이스 성능과의 거래 중단과 관련된 복잡한 문제입니다(예: Wiki 의 격리를 참조하십시오).
1.7.1.2. XA 표준에 대한 지원
리소스가 여러 리소스가 포함된 트랜잭션에 참여하려면 X/Open XA 표준을 지원해야 합니다. 리소스의 XA 표준 구현에 특수 제한 사항이 적용되는지 확인하십시오. 예를 들어 XA 표준의 일부 구현은 단일 데이터베이스 연결로 제한되므로 한 번에 하나의 스레드만 해당 리소스를 포함하는 트랜잭션을 처리할 수 있습니다.
1.7.2. 트랜잭션 관리자가 제공하는 서비스의 특성
다음 기능은 트랜잭션 관리자의 서비스 품질을 결정합니다.
1.7.2.1. 일시 중단/재사용 및 연결/수집 지원
일부 트랜잭션 관리자는 다음과 같이 트랜잭션 컨텍스트와 애플리케이션 스레드 간의 연결을 조작하기 위한 고급 기능을 지원합니다.
- 애플리케이션이 현재 스레드에서 일부 비-전달 작업을 수행하는 동안 현재 트랜잭션 컨텍스트를 일시적으로 일시 중단할 수 있습니다.Sust/resume current transaction-enables you to suspend temporarily the current transaction context, while the application does some non- Cryostatal work in the current thread.
- attach/detach 트랜잭션 컨텍스트 - 한 스레드에서 다른 스레드로 트랜잭션 컨텍스트를 이동하거나 여러 스레드를 포함하도록 트랜잭션 범위를 확장할 수 있습니다.Aach/detach transaction context -enables you to move a transaction context from one thread to another or to extend a transaction scope to include multiple threads.
1.7.2.2. 여러 리소스 지원
트랜잭션 관리자의 주요 차이점은 여러 리소스를 지원하는 기능입니다. 이는 일반적으로 XA 표준을 지원하며 트랜잭션 관리자는 XA 스위치를 등록하는 리소스에 대한 방법을 제공합니다.
엄격하게 말하면 XA 표준은 여러 리소스를 지원하는 데 사용할 수있는 유일한 접근 방식은 아니지만 가장 실용적인 방법입니다. 대안은 일반적으로 XA 스위치에서 일반적으로 제공하는 알고리즘을 구현하기 위해 번거 (및 중요한) 사용자 정의 코드를 작성하는 것과 관련이 있습니다.
1.7.2.3. 분산 트랜잭션
일부 트랜잭션 관리자는 범위에 분산 시스템에 여러 노드가 포함된 트랜잭션을 관리하는 기능이 있습니다. 트랜잭션 컨텍스트는 WS-AtomicTransactions 또는 CORBA OTS와 같은 특수 프로토콜을 사용하여 노드에서 노드로 전파됩니다.
1.7.2.4. 트랜잭션 모니터링
고급 트랜잭션 관리자는 일반적으로 보류 중인 트랜잭션의 상태를 모니터링하는 시각적 도구를 제공합니다. 이러한 종류의 도구는 시스템 오류 후 특히 유용합니다. 이 경우 불명확한 상태에 남아 있는 트랜잭션을 식별하고 해결하는 데 도움이 될 수 있습니다(심각적인 예외).
1.7.2.5. 실패에서 복구
시스템 장애 (crash) 발생시 트랜잭션 관리자 사이에는 강력한 차이점이 있습니다. 트랜잭션 관리자가 사용하는 주요 전략은 트랜잭션의 각 단계를 수행하기 전에 영구 로그에 데이터를 쓰는 것입니다. 오류가 발생하는 경우 로그의 데이터를 사용하여 트랜잭션을 복구할 수 있습니다. 일부 거래 관리자는이 전략을 다른 전략보다 더 신중하게 구현합니다. 예를 들어 고급 트랜잭션 관리자는 일반적으로 영구 트랜잭션 로그를 복제하고 각 로그를 별도의 호스트 시스템에 저장할 수 있습니다.