ACID와 데이터베이스 트랜잭션의 관계는 무엇입니까?
ACID는 데이터베이스 트랜잭션을 제공합니까, 아니면 같은 것입니까?
누군가이 주제를 밝힐 수 있을까요?
ACID와 데이터베이스 트랜잭션의 관계는 무엇입니까?
ACID는 데이터베이스 트랜잭션을 제공합니까, 아니면 같은 것입니까?
누군가이 주제를 밝힐 수 있을까요?
답변:
ACID 는 데이터베이스를 수정할 때 적용 할 속성 집합입니다.
트랜잭션은 일부 ACID 속성을 달성하는 데 사용되는 일련의 관련 변경 사항입니다. 트랜잭션은 ACID 속성을 달성하기위한 도구입니다.
원 자성이란 모든 트랜잭션이 발생하거나 전혀 수행되지 않음을 보증 할 수 있음을 의미합니다. 하나의 단일 장치로 또는 전체적으로 또는 복잡한 형태로 복잡한 작업을 수행 할 수 있으며 충돌, 정전, 오류 또는 기타 다른 작업을 수행하면 관련 변경 중 일부만 발생한 상태가 될 수 없습니다.
일관성은 데이터의 일관성을 보장한다는 것을 의미합니다. 관련 데이터에 대한 제약 조건 중 어느 것도 위반되지 않습니다.
격리는 한 트랜잭션이 아직 완료되지 않은 다른 트랜잭션에서 데이터를 읽을 수 없음을 의미합니다. 두 개의 트랜잭션이 동시에 실행되는 경우 각 트랜잭션은 순차적으로 실행중인 것처럼 세상을보고 다른 트랜잭션이 작성한 데이터를 읽어야하는 경우 다른 트랜잭션이 완료 될 때까지 기다려야합니다.
내구성은 트랜잭션이 완료되면 모든 변경 사항이 내구성있는 매체 (예 : 하드 디스크)에 기록되고 트랜잭션이 완료된 사실도 기록됨을 보장합니다.
따라서 트랜잭션은 이러한 속성을 보장하는 메커니즘입니다. 그것들은 전체적으로 하나의 작업 그룹이 원자적일 수 있고 일관된 결과를 생성하며 다른 작업과 분리되고 지속적으로 기록 될 수 있도록 관련 작업을 함께 그룹화하는 방법입니다.
ACID는 모든 트랜잭션 처리 엔진의 바람직한 속성입니다.
DBMS는 (아주 좋은 경우) 일반적으로 이러한 속성을 노출 시키지는 않지만 일반적으로 매우 광범위하게 노출되는 특정 종류의 트랜잭션 처리 엔진입니다.
그러나 이러한 속성을 노출 할 수있는 다른 엔진이 있습니다. 예전에는 "TP 모니터"라고 불렸던 일종의 소프트웨어 (현재는 웹 서버와 동등한 기능)입니다.
이러한 TP 모니터는 DBMS 이외의 리소스 (예 : 프린터)에 액세스 할 수 있으며 사용자에 대한 ACID를 계속 보장합니다. 프린터가 트랜잭션에 관여 할 때 ACID가 무엇을 의미하는지에 대한 예는 다음과 같습니다.
좀 더 설명하기 쉽게 프린터 예제를 수정했습니다.
내용이 2 페이지 인 1 개의 문서가 프린터로 전송되었습니다.
거래 -프린터로 전송 된 문서
이것이 누군가 ACID 개념을 익히는 데 도움이되기를 바랍니다.
ACID와 데이터베이스 트랜잭션의 관계는 무엇입니까?
관계형 데이터베이스에서는 모든 SQL 문이 트랜잭션 범위에서 실행되어야합니다.
트랜잭션 경계를 명시 적으로 정의하지 않으면 데이터베이스는 모든 개별 명령문을 둘러싼 암시 적 트랜잭션을 사용하게됩니다.
내재적 트랜잭션은 명령문이 실행되기 전에 시작되고 명령문이 실행 된 후 종료 (커밋 또는 롤백)됩니다. 암시 적 트랜잭션 모드는 일반적으로 자동 커밋으로 알려져 있습니다.
이 기사 에서 설명하는 것처럼 트랜잭션은 포함 된 모든 작업이 성공한 경우에만 성공하는 읽기 / 쓰기 작업의 모음입니다.
본질적으로 트랜잭션은 네 가지 속성 (일반적으로 ACID라고 함)으로 구성됩니다.
ACID는 데이터베이스 트랜잭션을 제공합니까, 아니면 같은 것입니까?
관계형 데이터베이스 시스템의 경우 이는 SQL 표준이 트랜잭션이 ACID 보증을 제공하도록 지정하기 때문에 적용됩니다.
Atomicity는 개별 작업을 수행하여 포함 된 모든 작업이 성공한 경우에만 성공하여 전혀 또는 전혀없는 작업 단위로 바꿉니다.
트랜잭션은 상태 변경을 캡슐화 할 수 있습니다 (읽기 전용이 아닌 경우). 주어진 시간에 얼마나 많은 동시 트랜잭션이 인터리브되는지에 관계없이 트랜잭션은 항상 시스템을 일관성있는 상태로 유지해야합니다.
일관성은 커밋 된 모든 트랜잭션에 대해 제약 조건이 적용됨을 의미합니다. 이는 모든 키, 데이터 유형, 검사 및 트리거가 성공적이며 제약 조건 위반이 트리거되지 않음을 의미합니다.
트랜잭션에는 동시성 제어 메커니즘이 필요하며 인터리브 될 때도 정확성을 보장합니다. 트랜잭션이 실패해도 시스템 상태가 손상되지 않아야하므로 격리는 커밋되지 않은 상태 변경을 외부 세계로부터 숨길 수있는 이점을 제공합니다. 비관적 또는 낙관적 잠금 메커니즘을 사용하여 동시성 제어를 통해 격리가 이루어집니다.
성공적인 트랜잭션은 시스템 상태를 영구적으로 변경해야하며 종료하기 전에 상태 변경이 지속 된 트랜잭션 로그에 기록됩니다. 시스템 충돌이나 정전으로 인해 시스템이 갑자기 영향을받는 경우 완료되지 않은 커밋 된 트랜잭션이 모두 재생 될 수 있습니다.
ACID 속성은 데이터베이스 이론의 매우 오래되고 중요한 개념입니다. 이 주제에 대해 많은 게시물을 찾을 수 있지만 RDBMS의 매우 중요한 주제이기 때문에 이에 대한 답변을 시작하고 싶습니다.
데이터베이스 시스템은 모든 트랜잭션에 특정 특성이있는 다양한 유형의 트랜잭션을 처리합니다. 이 특성을 ACID 속성이라고합니다. ACID 속성은 모든 작업을 수행하기 위해 모든 데이터베이스 트랜잭션에 대한 권한을 부여합니다.
원 자성 : 모두 또는 아무것도 저 지르지 않습니다.
일관성 : 트랜잭션의 모든 규칙과 제약 조건을 검증한다는 관점에서 일관된 기록을 만듭니다.
격리 : 두 트랜잭션이 서로를 인식하지 못하도록합니다.
내구성 : 커밋 된 데이터를 영원히 저장합니다. 이 기사에서 가져온 참조 :
[Gray]는 1981 년에 거래에 대한 ACD 속성을 소개했습니다. 1983 년에 [Haerder]는 Isolation 속성을 추가했습니다. 제 생각에는 ACD 속성에는 더 유용한 속성 집합이있을 것입니다. Atomicity에 대한 한 가지 해석 (언제든지 클라이언트가 볼 수있는 트랜잭션이 원자 적이어야 함)은 실제로 격리 속성을 암시합니다. "격리"속성은 트랜잭션이 격리 되지 않은 경우에 유용합니다 . 격리 특성이 완화되었을 때 ANSI SQL에서 말하기 : 격리 수준이 약하면 SERIALIZABLE입니다. 그러나 격리 수준을 직렬화 할 수 있으면 격리 속성에 실제로 관심이 없습니다.
블로그 게시물에 "ACID가 감지하지 못함"에 이에 대해 더 많이 썼습니다.
http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html
[Gray] 트랜잭션 개념, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf
[Haerder] 트랜잭션 지향 데이터베이스 복구 원칙, Haerder and Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf