데이터베이스 트랜잭션

Database transaction

데이터베이스 트랜잭션은 데이터베이스에 대해 데이터베이스 관리 시스템(또는 유사한 시스템) 내에서 수행되는 작업 단위를 상징하며, 다른 트랜잭션과는 독립적으로 일관성 있고 신뢰할 수 있는 방법으로 처리됩니다.트랜잭션은 일반적으로 데이터베이스의 변경사항을 나타냅니다.데이터베이스 환경에서의 트랜잭션에는 주로 다음 두 가지 목적이 있습니다.

  1. 시스템 장애 발생 시에도 데이터베이스를 일관되게 유지하고 장애로부터 올바르게 복구할 수 있는 신뢰할 수 있는 작업 단위를 제공합니다.예를 들어, 실행이 너무 일찍 중단되어 예기치 않게(완전 또는 부분적으로) 중지된 경우, 이 경우 데이터베이스의 많은 작업이 완료되지 않은 상태로 남아 상태가 불분명합니다.
  2. 데이터베이스에 동시에 액세스하는 프로그램 간의 분리를 제공합니다.이 분리가 제공되지 않으면 프로그램의 결과가 잘못될 수 있습니다.

데이터베이스 관리 시스템에서 트랜잭션은 논리 또는 작업의 단일 단위이며, 때로는 여러 작업으로 구성됩니다.데이터베이스에서 일관성 있는 모드로 수행되는 모든 논리적 계산을 트랜잭션이라고 합니다.한 은행 계좌에서 다른 은행 계좌로 이체하는 예를 들 수 있습니다.완전한 거래에서는 한 계좌에서 이체할 금액을 뺀 후 다른 계좌에 같은 금액을 더해야 합니다.

데이터베이스 트랜잭션은 정의상 원자성 트랜잭션(전체 트랜잭션 또는 전혀 영향을 미치지 않아야 함), 일관성 있는 트랜잭션(데이터베이스의 기존 제약조건에 부합해야 함), 격리된 트랜잭션(다른 트랜잭션에 영향을 주지 않아야 함), 내구성이 뛰어난 트랜잭션(영속 [1]스토리지에 기록되어야 함)이어야 합니다.데이터베이스 실무자들은 종종 ACID라는 약자를 사용하여 데이터베이스 트랜잭션의 이러한 속성을 참조합니다.

목적

데이터 무결성을 가장 중요하게 여기는 데이터베이스 및 기타 데이터 저장소에는 종종 데이터의 무결성을 유지하기 위해 트랜잭션을 처리하는 기능이 포함됩니다.단일 트랜잭션은 하나 이상의 독립적인 작업 단위로 구성되며, 각 작업 단위는 데이터베이스 또는 다른 데이터 저장소에 정보를 읽거나 씁니다.이 경우 이러한 모든 처리가 데이터베이스 또는 데이터 저장소를 일관된 상태로 유지하도록 하는 것이 종종 중요합니다.

복식회계 시스템의 예는 종종 거래의 개념을 설명한다.복식회계에서는 모든 차변은 관련된 신용을 기록해야 한다.식료품을 사기 위해 100달러 수표를 발행하는 경우, 거래 복식회계 시스템은 단일 거래를 커버하기 위해 다음 두 항목을 기록해야 한다.

  1. 식료품비 계좌로 100달러 차변
  2. 당좌예금 계좌로 100달러 입금

트랜잭션 시스템에서는 두 엔트리가 모두 통과하거나 두 엔트리가 모두 실패합니다.복수의 엔트리의 기록을 작업의 원자 트랜잭션 단위로 취급함으로써 시스템은 기록된 데이터의 무결성을 유지한다.즉, 차변은 기록되지만 관련 신용은 기록되지 않는 상황 또는 그 반대 상황이 발생하지 않습니다.

트랜잭션 데이터베이스

트랜잭션 데이터베이스는 괄호로 묶인 데이터베이스 작업 세트(begin-commit)의 ACID 속성을 제공하는 DBMS입니다.트랜잭션 내의 모든 쓰기 작업은 모두 또는 전혀 영향을 미치지 않습니다. 즉, 트랜잭션이 성공하여 모든 쓰기가 활성화되거나 그렇지 않으면 데이터베이스가 트랜잭션의 쓰기를 포함하지 않는 상태로 전환됩니다.또한 트랜잭션은 동시 트랜잭션의 효과가 격리 수준이라고 알려진 특정 보증을 충족하는지 확인합니다.가장 높은 분리 수준은 동시 트랜잭션의 효과가 직렬(즉, 순차적) 실행과 동일함을 보장하는 직렬화입니다.

대부분의 최신 관계형 데이터베이스 관리 시스템은 트랜잭션을 지원합니다.NoSQL 데이터베이스는 동시 업데이트 및 액세스 시 데이터 일관성을 보장하기 위해 트랜잭션 지원과 함께 확장성에 우선순위를 부여합니다.

데이터베이스 시스템에서 트랜잭션은 하나 이상의 데이터 조작문 및 쿼리로 구성될 수 있으며, 각 데이터베이스 내의 정보를 읽고/또는 쓴다.데이터베이스 시스템 사용자는 데이터의 일관성과 무결성을 매우 중요하게 생각합니다.단순 트랜잭션은 일반적으로 다음과 유사한 패턴을 사용하여 트랜잭션에 포함된 SQL과 같은 언어로 데이터베이스 시스템에 발급됩니다.

  1. 트랜잭션을 시작합니다.
  2. 일련의 데이터 조작 및/또는 쿼리를 실행합니다.
  3. 오류가 발생하지 않으면 트랜잭션을 커밋합니다.
  4. 오류가 발생하면 트랜잭션을 롤백합니다.

트랜잭션 커밋 조작은 데이터베이스에 대한 트랜잭션 범위 내의 모든 데이터 조작 결과를 유지합니다.트랜잭션 롤백 작업은 데이터베이스에 대한 트랜잭션 범위 내에서 데이터 조작의 일부 결과를 유지하지 않습니다.부분 트랜잭션은 데이터베이스가 일관되지 않은 상태가 되므로 데이터베이스에 커밋할 수 없습니다.

내부적으로 다중 사용자 데이터베이스는 트랜잭션 ID 또는 XID를 사용하여 트랜잭션을 저장하고 처리합니다.

트랜잭션을 구현하는 방법은 위에서 설명한 단순한 방법 외에 여러 가지가 있습니다.를 들어 중첩된 트랜잭션은 새 트랜잭션(예: 하위 트랜잭션)을 시작하는 문을 포함하는 트랜잭션입니다.다단계 트랜잭션은 중첩된 트랜잭션의 한 종류로, 하위 트랜잭션은 계층화된 시스템 아키텍처의 서로 다른 수준에서 발생합니다(예를 들어 데이터베이스 엔진 수준에서 한 번의 작업을 수행하고 운영 [2]체제 수준에서 한 번의 작업을 수행).또 다른 거래 유형은 보상 거래입니다.

SQL에서

트랜잭션은 대부분의 SQL 데이터베이스 구현에서 사용할 수 있지만 견고성 수준은 다양합니다.를 들어 MySQL은 초기 버전 3.23부터 트랜잭션을 지원하기 시작했지만 InnoDB 스토리지 엔진은 버전 5.5 이전에는 기본값이 아니었습니다.사용 가능한 이전 스토리지 엔진에서는 MyISAM은 트랜잭션을 지원하지 않습니다.

트랜잭션은 일반적으로 다음 명령을 사용하여 시작됩니다.BEGIN(단, SQL 표준에서는START TRANSACTION). 시스템이 a를 처리할 때COMMIT스테이트먼트. 트랜잭션은 정상적으로 종료됩니다.aROLLBACK스테이트먼트는 또한 트랜잭션을 종료할 수 있으며 이후 수행된 작업을 취소할 수 있습니다.BEGIN트랜잭션 시작 시 자동 커밋이 비활성화되어 있으면 트랜잭션 종료 시 자동 커밋도 다시 활성화됩니다.

개별 트랜잭션 작업뿐만 아니라 전 세계적으로도 분리 수준을 설정할 수 있습니다.최고 레벨(READ COMMITTED트랜잭션 시작 후 수행된 작업의 결과는 트랜잭션이 종료될 때까지 다른 데이터베이스 사용자가 볼 수 없는 상태로 유지됩니다.최하위 레벨(READ UNCOMMITTED높은 동시성을 확보하기 위해 사용되는 경우가 있습니다.이러한 변경은 즉시 확인할 수 있습니다.

오브젝트 데이터베이스

관계형 데이터베이스는 일반적으로 고정된 크기의 필드와 레코드가 있는 테이블로 구성됩니다.오브젝트 데이터베이스는 직렬화 가능하거나 MIME 유형을 포함하는 가변 크기 블럽으로 구성됩니다.릴레이셔널 데이터베이스와 오브젝트 데이터베이스의 기본적인 유사점은 시작과 커밋 또는 롤백입니다.

트랜잭션을 시작한 후 데이터베이스 레코드 또는 개체가 읽기 전용 또는 읽기/쓰기 중 하나로 잠깁니다.읽기 및 쓰기가 발생할 수 있습니다.트랜잭션이 완전히 정의되면 변경 내용이 커밋되거나 원자적으로 롤백되므로 트랜잭션 종료 시 불일치가 발생하지 않습니다.

분산 트랜잭션

데이터베이스 시스템은 분산 트랜잭션[3] 여러 노드의 데이터에 액세스하는 트랜잭션으로 구현합니다.분산 트랜잭션은 여러 노드에 걸쳐 ACID 속성을 적용하며 데이터베이스, 스토리지 관리자, 파일 시스템, 메시징 시스템 및 기타 데이터 관리자와 같은 시스템을 포함할 수 있습니다.분산거래에는 일반적으로 거래의 모든 부분이 모든 관련 시스템에 적용되도록 모든 과정을 조정하는 기업이 있다.

트랜잭션 파일 시스템

Namesys Reiser4 Linux용[4] 파일 시스템은 트랜잭션을 지원하며, Microsoft Windows Vista에서는 Microsoft NTFS[5] 파일 시스템이 네트워크를 통한 분산 트랜잭션을 지원합니다.WTF([6]Warp Transactional Filesystem)와 같이 보다 일관된 데이터 파일 시스템에 대한 연구가 진행되고 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "What is a Transaction? (Windows)". msdn.microsoft.com.
  2. ^ Beeri, C.; Bernstein, P. A.; Goodman, N. (1989). "A model for concurrency in nested transactions systems". Journal of the ACM. 36 (1): 230–269. doi:10.1145/62044.62046. S2CID 12956480.
  3. ^ Özsu, M. Tamer; Valduriez, Patrick (2011). Principles of Distributed Database Systems, Third Edition. Springer. Bibcode:2011podd.book.....O. doi:10.1007/978-1-4419-8834-8. ISBN 978-1-4419-8833-1.
  4. ^ "Linux.org". Linux.org.
  5. ^ "MSDN Library". Retrieved 16 October 2014.
  6. ^ https://www.usenix.org/system/files/conference/nsdi16/nsdi16-paper-escriva.pdf[베어 URL PDF]

추가 정보

외부 링크