데이터베이스 트랜잭션이란 무엇입니까?


114

누군가 컴퓨팅에 적용되는 트랜잭션에 대해 (가능한 것보다 간단하지는 않지만) 간단한 설명을 제공 할 수 있습니까 (위키 백과에서 복사 한 경우라도)?

답변:


239

트랜잭션은 "전체"로 취급하려는 작업 단위입니다. 그것은 완전히 일어나거나 전혀 일어나지 않아야합니다.

전형적인 예는 한 은행 계좌에서 다른 계좌로 돈을 이체하는 것입니다. 그렇게하려면 먼저 소스 계정에서 금액을 인출 한 다음 대상 계정에 입금해야합니다. 작업이 완전히 성공해야합니다. 중간에 멈 추면 돈을 잃게되고 그것은 매우 나쁩니다.

현대 데이터베이스에서 트랜잭션은 다른 사람이 중간에 작성한 데이터에 액세스 할 수 없도록하는 등 다른 작업도 수행합니다. 그러나 기본 아이디어는 동일합니다. 어떤 일이 발생하더라도 작업하는 데이터가 합리적인 상태 에 있도록 보장하기 위해 트랜잭션이 존재합니다 . 그들은 돈이 한 계좌에서 인출되지만 다른 계좌로 입금되지 않는 상황이 없을 것임을 보장합니다.


덕분에 아주 간단한 예를 들어
Nomadme

좋은 설명!
Yan Myo Aung

81

트랜잭션은 상태 변경을 나타내는 방법입니다. 트랜잭션에는 일반적으로 ACID라고하는 네 가지 속성이 있습니다.

  • 원 자성 (변경 사항이 커밋 된 경우 한 번에 발생하며 "반 변경"을 볼 수 없음)
  • 일관성 (시스템의 새 상태가 유효한 경우에만 변경이 발생할 수 있습니다. 잘못된 변경을 커밋하려는 시도는 실패하고 시스템은 이전의 유효한 상태로 유지됩니다)
  • 격리 됨 (커밋 될 때까지 아무도 트랜잭션의 일부를 볼 수 없음)
  • 지속성 (변경이 발생하면 시스템이 트랜잭션이 커밋되었다고 말하면 클라이언트는 변경을 "고정"하기 위해 시스템을 "플러시"하는 것에 대해 걱정할 필요가 없습니다.)

자세한 내용은 Wikipedia ACID 항목을 참조하십시오.

일반적으로 데이터베이스에 적용되지만 반드시 그럴 필요는 없습니다. (특히 소프트웨어 트랜잭션 메모리를 참조하십시오 .)


46

여기에 간단한 설명이 있습니다. 계정 A에서 계정 B로 100 달러를 이체해야합니다. 다음 중 하나를 수행 할 수 있습니다.

accountA -= 100;
accountB += 100;

또는

accountB += 100;
accountA -= 100;

쌍의 첫 번째 작업과 두 번째 작업 사이에 문제가 발생하면 문제가 있습니다. 100 달러가 사라 졌거나 갑자기 나타났습니다.

트랜잭션은 작업 그룹을 표시하고 모두 실행 (커밋)하거나 시스템 상태가 전혀 실행되지 않은 것처럼 (롤백) 실행되는 방식으로 실행할 수있는 메커니즘입니다.

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;

100 달러를 이체하거나 두 계정을 모두 초기 상태로 둡니다.


31

"완전히 완료되거나 완전히 실패하여 데이터베이스를 일관된 상태로 유지해야하는 일련의 데이터 조작 명령문"


2
데이터베이스뿐만 아니라. 이 개념을 대기열 서비스 또는 외부 시스템 상태와 같은 다른 구성 요소로 확장 할 수 있습니다. 그래서, "일관성있는 상태에서 시스템을 떠나 완전히 중 하나를 완전히 완료되거나 실패해야하는 데이터 조작 명령문의 시리즈"
마이클 Chaniewski

10

트랜잭션은 하나의 단위로 처리되는 하나 이상의 SQL 작업 시퀀스입니다.

특히 각 트랜잭션은 격리 된 상태로 실행되는 것으로 보이며 시스템이 실패하면 각 트랜잭션이 전체적으로 실행되거나 전부 실행되지는 않습니다.

거래의 개념은 완전히 독립적 인 두 가지 관심사에 의해 동기가 부여됩니다. 하나는 여러 클라이언트가 데이터베이스에 동시에 액세스하는 것과 관련이 있고 다른 하나는 시스템 장애에 대해 탄력적 인 시스템을 갖는 것과 관련이 있습니다.

트랜잭션은 ACID 속성으로 알려진 것을 지원합니다.

  • A : 원 자성;
  • C : 일관성;
  • I : 격리;
  • D : 내구성.


1

나는 '트랜잭션 처리'의 정의가 컴퓨터 과학의 개념으로 트랜잭션을 다루기 때문에 더 유용 할 것이라고 제안합니다.

wikipedia에서 :

컴퓨터 과학에서 트랜잭션 처리는 트랜잭션이라고하는 개별적이고 분할 할 수없는 작업으로 구분되는 정보 처리입니다. 각 트랜잭션은 완전한 단위로 성공하거나 실패해야합니다. 중간 상태로 남아있을 수 없습니다.

http://en.wikipedia.org/wiki/Transaction_processing#Implementations


1

위의 응답 외에도 적어도 이론적으로는 거래에 어떤 종류의 자원이 포함되는지에 대한 제한이 없다는 점에 유의해야합니다.

대부분의 경우 데이터베이스 또는 여러 개의 개별 데이터베이스 일 뿐이지 만 프린터가 트랜잭션에 참여하고 용지 걸림이 발생하는 경우 해당 트랜잭션이 실패하게 할 수도 있습니다.


1

트랜잭션은 최소 처리 단위로 간주되는 작업 모음으로 정의 할 수 있습니다. 각 최소 처리 단위는 더 이상 나눌 수 없습니다.

트랜잭션의 주요 작업은 읽기 및 쓰기입니다.

모든 거래에는 정확성, 완전성 및 데이터 무결성을 보장하기 위해 일반적으로 ACID 속성으로 알려진 4 가지 속성이 포함되어야합니다.


0

트랜잭션은 DBMS 측면에서 원자 적 행동이라고 생각합니다.

즉, 분리 할 수 ​​없습니다. 예, 트랜잭션에는 시스템이 실행할 몇 가지 명령이있을 수 있습니다. 그러나 그들은 하나의 기본 작업을 완료하기 위해 함께 묶여 있습니다.

예를 들면. 다리를 통과해야합니다 (이것을 트랜잭션으로 취급합시다). 이렇게하려면 100 걸음이 필요합니다. 전반적으로 이러한 단계는 분리 할 수 ​​없습니다. 절반을 완료하면 두 가지 선택 사항이 있습니다. 계속해서 모두 완료하고 시작 지점으로 돌아갑니다. 트랜잭션의 결과와 같습니다 : success (commit) 및 fail (rollback)


0

트랜잭션은 분할 할 수없는 데이터 처리 단위입니다. 모든 트랜잭션에는 ACID 속성이 있어야합니다.

즉 : 원 자성, 일관성, 격리 및 지속성 거래는 전부 또는 전혀 방해하지 않습니다. 한 계정에서 돈을 이체하고 다른 계정은 여전히 ​​비어있어 거래가 아닙니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.