문제

I wouldn't dare 아무것도 할 복잡하지 않고 데이터베이스 트랜잭션이 있습니다.가 거의 항상 사용이 간단에 내장 된 명령입니다.하지만 시작할 때 다른 영구적인 데이터는 당신이하지 않는 이를 사용하는 간단한 트랜잭션을 지원합니다.몇 가지 예제

  • 파일 시스템
  • 웹 서비스(이 없는 한 사용)

에도 비영구적인 데이터는 것이 매우 유용한 경우가 종종을 취소 블록의 일을,다음과 같은 예외입니다.없음의 기준은 데이터 구조를 얻어 지원 트랜잭션이 있습니다.

내가 무엇을 알고 싶은 이유는 데이터베이스는 특별한 경우?

이 있는 유용한 링크의 주제 트랜잭션 동작으로의 데이터베이스?

도움이 되었습니까?

해결책

나는 정중하게 동의하지 않:트랜잭션 시스템은 자동으로 그리고 독점적으로 데이터베이스 엔진,매우 반대로...

가 구현되는 응용 프로그램이 트랜잭션 메커니즘(습니다.NET)는 뚜렷한 데이터베이스에서 트랜잭션이 있습니다.그것이 실제로 오히려 쉽(몇 시간을 포함하여 작업 단위 테스트 suite).그것은 완전히 쓰여 C#에서와 전혀 사용하지 않는 모든 데이터베이스 기능이나 다른 구성 요소입니다.그러나 먼저 어떤 상황에 맞는...

이 비 데이터베이스 트랜잭션 기능에 존재하는 여러 가지 표현에서 자바 플랫폼과 같 Ejb,ESBs,JMS,그리고 종종에서 협회와 BPM.일부의 이러한 표현을 사용하여 근본적인 데이터베이스,항상 그런 것은 아니지만이 아닌 필요합니다.다른 플랫폼을 비교 표현 등,MSMQ.

대부분의 유산 버전 관리 시스템을 구현하지 않산 트랜잭션을 의미입니다.로 ddaa 말했다,CVS 하지 않지만 Subversion(그 승계기)는 않습니다.Visual Source 안전하지 않습니다.연구 하는 경우 파괴할 수 있습을 찾아 비교 차트를 만드는 점이다.

지금에 대한 중요한 포인트,데이터베이스 트랜잭션 또는 그와 동등한 보증하지 않습이 안전 사업 논리입니다.하지만 나는 사랑을 파괴,그것은 아이러니하게도 좋은 예이 사실이다.

당신이 사용할 수 있는 종교적으로 파괴와 함께,자동화된 구성 스크립트(하나는 명령을 컴파일하고,테스트,패키지 응용 프로그램),그리고 여전히 저지를 깨지를 구축하 제어 소스장합니다.나는 그것을 보았습니다.물론 그것이 더욱 쉽게 비산 트랜잭션 기반의 원본어 같은 도구 VSS.하지만 그것은 충격을 많은 사람들이 배우는 것이 가능과 같은 도구를 파괴.

을 허용하시기 바랍니아웃 시나리오이다.당신 동료 개발하고 있는 응용 프로그램을 사용하여 파괴에 대한 근원 제어합니다.모두 당신은 코딩이다 때때로 투입합니다.당신은 약간 변경,실행 빌드(를 다시 컴파일하는 모든 소스 파일),그리고 모든 테스트를 통과합니다.그래서,당신은 당신 변경 사항을 적용 및 집으로 이동합니다.의 동료에 노력하고 있습니다 자신의 변화,그래서 그는 또한 실행 빌드,보고는 모든 테스트에 통과하고 커미합니다.하지만,당신의 동료한 후 업데이트에서 저장소에,더 많은 변경,실행 빌드하고,구축을 불면서 그의 얼굴입니다!그으로 되돌아가 그의 변경,업데이트 저장소에서 다시(는지 확인하기 위해),음을 발견하고 깨끗한 아직 구축이 불면까지!의 동료를 보낸 다음 시간의 몇 문제를 해결합 구축하고 원본,그리고 결국을 찾는 그 변경 당신을 만들기 전에 당신은 왼쪽의 원인이 되는 구축 실패입니다.그는 화재 떨어져 불쾌한 이메일을,당신과 당신의 상호 상사,불평하는 파산 구축 및 그 부주의 집으로 갔다.당신은 도착에서 아침을 찾고 당신의 상사가 동료에서 기다리고의 서비스로 악한 당신을,및 다른 사람들을보고!그래서 당신은 빨리 실행 빌드하고 그들에게 보여 빌드이 파산하지 않습니다(모든 테스트를 통과,그냥 좋아하는 마지막 밤에).

그래서,어떻게 이런 일이 가능합니까?그것은 가능하기 때문에 개발자의 워크스테이션의 일부가 아닌산 트랜잭션파괴를 보장 내용입니다.을 때의 동료 업데이트된 저장소에서 그의 워크스테이션 포함된 혼합 복사본의 내용이 저장소를 포함하여(변경)및 그 자신의되지 않은 변경사항.을 때의 동료가 실행 빌드에 자신의 워크스테이션,그는 그를 호출하여 비즈니스 트랜잭션에 의해 보호되지 않았산 의미입니다.그 때 복귀 그의 변경 내용과이 업데이트를 수행,그의 워크스테이션 다음과 일치하는 저장소하지만 빌드가 여전히 끊었다.왜?기 때문에 워크스테이션도 부분은 별도의 비즈니스 트랜잭션도에 의해 보호되지 않았산 의미론과는 달리,저지합니다.이후 업데이트하지 않았 워크스테이션에 맞게 저장하기 전에 실행 당신의 청소 구축,당신은 실제로 건물의 소스 파일로 그들의 존재합니다.수행할 경우 이러한 업데이트,다음 찾을 수 있는 빌드가 실패에 당신의 워크스테이션입니다.

지금 내가 할 수 있는 상세히 설명에 초점 거래가 범위/컨텍스트는 신중하게 고려되어야한다.그냥 당신이 가지고 있기 때문에 인산 트랜잭션을 의미하지 않는 귀하의 비즈니스 로직이 안전하지 않는 범위/의 컨텍스트산 트랜잭션과 비즈니스 논리로 정확하게 일치하.에 의존하는 경우 몇 가지 형태의 데이터베이스산 트랜잭션이지만,당신은 아무것도 귀하의 비즈니스에서 논리에 의해 포함되지 않는다는 데이터베이스 트랜잭션,후에 당신은 당신의 간격을 허용할 수 있는 비교하고 치명적인 오류가 있습니다.할 수 있는 경우의 비즈니스 로직을 정확하게 일치의 데이터베이스 트랜잭션,다음은 모든 것입니다.그렇지 않은 경우,당신은 아마도 비즈니스 트랜잭션이 있습니다.의 성격에 따라 보호되지 않은 논리해야 할 수 있습을 구현하 자신의 트랜잭션 메커니즘이 있습니다.

그래서,메시징이 될 수 있습 트랜잭션이지만,범위는 단순한 메시지입니다.에 관한 위의 예,전복의 맥락에만 개인에 투입합니다.그러나,비즈니스 트랜잭션은 깨끗하고 구축을 포함하는 훨씬 더 큰 범위가 있습니다.이 특별한 문제를 해결하는 것은 일반적으로 해결하여 스크립트 빌드와 함께 청소 체크아웃,관광을 사용하여 지속적인 통합 구현을(예를 들어,통 CruiseControl or the like).에서 개발 워크스테이션에 필요한 각각의 개발자가 운동을 규율하는 전체 업데이트를 수행(또는 청소 체크아웃)기 전에는 깨끗하다.

도록,정리해 보면,모든 거래는 범위 또는 컨텍스트를 제한하는 그것의 보호합니다.비즈니스 트랜잭션을 통합 논리를 초과하는 트랜잭션의 범위는 메커니즘(데이터베이스와 같은 엔진)우리는 일반적으로 사용.수도 있습니다.드문 경우에,그것도 쓰는 이해 당신의 자신의 트랜잭션을 수행하기 위한 메커니즘이다.

나는 설계시의 중요한 비즈니스 시스템은 겸손한 아흔 사람이 회사입니다.나는 그것을 구현하는 데 필요한 그러한 메커니즘,그리고 내가 발견한 경험하기 쉬운,보람있고,보상하고 있다.나는 그것을 다시 한,아마도 조금 더 쉽게,그러나 나는 항상 질문이 왜 나가지 못하는 데이터베이스 트랜잭션이 있습니다.

다른 팁

트랜잭션이 데이터베이스에서만 볼 수있는 이유는 정의상 트랜잭션을 제공하는 시스템을 데이터베이스라고하기 때문입니다. 원형으로 들리므로 자세히 설명해야합니다.

거래 지원은 제공하는 기능입니다 속성. 평신도 용어로, 이는 트랜잭션이 1을 허용하는 것임을 의미합니다. 1. 여러 가지 신중한 작업을 하나의 패키지에 묶어 전체적으로 성공하거나 전체적으로 실패합니다. 항상 시스템의 "일관된"견해가 있습니다.

파일 시스템 전통적으로 일부 잠금 장치를 제공하지만 이는 거래를 제공하는 것과 다릅니다. 그러나 모든 파일 시스템에는 일부 원자 속성이 있습니다. 예를 들어, 디렉토리가있는 경우 /a/ 그리고 /b/, 그리고 당신은 동시에 공연을 시도합니다 mv /a /b/a 그리고 mv /b /a/b, 이러한 작전 중 하나만이 무결성을 손상시키지 않으면 서 성공할 것입니다. 그러나 파일 시스템에 일반적으로 부족한 것은 여러 작업을 하나의 분리 된 원자 번들에 묶을 수있는 능력입니다.

답변 전복을 언급했습니다. 모든 Sane 버전 제어 시스템에는 트랜잭션이 있습니다. 여러 파일에 커밋 할 때 시스템은 커밋을 완전히 적용하거나 완전히 거부합니다 (CVS 제외, 제정신으로 간주하지 않습니다). 거부의 원인은 항상 동시 변화입니다. 버전 제어 시스템 구현자는 데이터베이스를 유지 관리하는 것을 매우 의식합니다.

또 다른 답변 메시징 시스템을 트랜잭션으로 언급했습니다. 나는 링크 된 자료를 읽지 않았지만 대답 자체는 메시지의 원자 전달 만 언급했습니다. 그것은 거래가 아닙니다.

나는 들어 본 적이 없다 Clojure ~ 전에 브라이언 C. 여기에 언급했습니다. 그것은 실제로 데이터베이스의 맥락 이외의 트랜잭션 구현 인 것 같습니다. 여기서 초점은 내구성있는 데이터의 일관성을 유지하기보다는 동시성 제어입니다.

따라서 Clojure를 제외하고 트랜잭션이 필요한 시스템은 기본 데이터베이스를 사용하거나 데이터베이스로 바꾸는 것으로 보입니다.

최신 파일 시스템에는 거래가 있습니다. 그들은 최종 사용자에게 투명합니다.

NTFS, XFS, JFS, EXT3 및 ReiserFS는 모두 만듭니다.

그리고 그것은 파일 시스템 내부입니다. 많은 OS는 또한 독점적 (쓰기) 및 공유 (읽기) 잠금 장치를 사용하여 파일 잠금 (예를 들어 *Nix World의 Flock (2) 참조)을 지원합니다.

편집 : 그것에 대해 생각하면 파일 시스템에는 현대 DBS와 같은 격리 수준이 없습니다. 일단 파일 읽기를 마치면 잠금을 잠그지 않으면 전통적으로 닫습니다. 그런 다음 글을 쓰고 싶을 때 다시 열었습니다.

Clojure 용도 소프트웨어 트랜잭션 메모리, 트랜잭션을 사용하여 수동 잠금 장치없이 멀티 스레드 프로그램을 작성하는 것이 쉽고 안전합니다. Clojure는 이에 대한 변이 가능한 데이터 구조를 갖는 불변의 데이터 구조를 가지고 있으며, 참조를 변경하기 위해 거래가 필요합니다.

메시징 시스템은 거래 자원 관리자의 또 다른 예입니다.

즉, 메시지 소비자가 큐에서 메시지를 성공적으로 처리하도록 할 수 있습니다. 처리가 실패하면 메시지가 큐에 남아 있습니다.

또한 메시징 시스템은 다른 리소스 관리자와의 분산 거래에 참여할 수 있습니다.

더 많은 정보

Subversion Commits는 거래입니다. 그들은 진정으로 원자이므로 중단 된 커밋은 저장소를 일관되지 않은 상태로 남기지 않습니다.

파일 시스템과 데이터베이스를 하나의 트랜잭션 단위로 취급하는 데 필요한 상황이있었습니다.

제 경우에는 파일 세트를 파일 시스템에만 다운로드하면됩니다. 매번 임의의 디렉토리를 만들고, 데이터를 넣고, 디렉토리 이름을 데이터베이스 테이블에 저장하여 수행했습니다. 따라서 모든 데이터베이스 작업 및 데이터베이스 테이블의 디렉토리 이름 (= 파일 시스템 작업)은 하나의 데이터베이스 트랜잭션에서 수행 할 수 있습니다.

http://www.databasesandlife.com/atomic-operations-over-filesystem-and-database/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top