2011-10-13 2 views

답변

3

ACID가없는 것은 흔들림이 없어도 원 자성, 일관성, 격리 또는 내구성을 보장하지 않는다는 것을 의미합니다.

원 자성이 없으면 함께 성공하거나 실패해야하는 여러 작업이 수행된다고 보장 할 수 없습니다. 예를 들어 거래가 원 계좌에서 인출되고 한도 내에서 다른 계좌에 금액을 인출해야하는 경우 원자 트랜잭션이없는 경우 자신의 솔루션을 롤업해야하며 그렇지 않으면 하나의 계좌에서 금액을 인출 할 수 있습니다. 해당 신용.

일관성이 없으면 트랜잭션의 "부작용", 즉 트리거 발생 또는 외부 키 관계 계단식과 같은 관계형 데이터베이스에서의 작동을 보장 할 수 없습니다. 따라서 거래에 대한 자동 증분 고유 식별자가 필요한 경우이를 얻을 수 있다고 보장 할 수 없습니다.

두 개의 프로세스가 동시에 데이터에 영향을 미치지 않도록 보장 할 방법이 없습니다. 예를 들어, 하나의 프로세스가 필드의 값을 증가시키고 두 번째 프로세스가 필드의 값을 감소시킬 수 있습니다 - 누가 승자가됩니까?

내구성이 없으면 하드웨어 오류로 인해 데이터베이스가 예상보다 다른 상태로 남을 수 있습니다. 예를 들어 변경 내용이 데이터 저장소에 기록되었지만 일부 내부 메모리 버퍼에 대기했다가 사라지는 것으로 생각할 수 있습니다. 얇은 공기가 있으면 정전이됩니다.

ACID 준수가없는 상황에서 작동하는 NoSQL에서 솔루션을 개발하는 것은 가능하지만 노력의 수준은 엄청날 것입니다. 그리고 관계형 데이터베이스를 작성하는 사람들만큼 좋은 일은 거의하지 않을 것입니다 ....

+0

모두 (?) NoSQL 데이터베이스에는 적어도 'D'가 있습니다. 아무도 전원이 꺼지면 트랜잭션이 사라지기를 원합니다. '나'와 함께 NoSQL 사용자는 "누가이기는가?"라고 묻지 않을 것입니다. "누가 사용자가 이기기를 기대합니까?" 동시에 발생하는 경우 사용자는 어떤 방법으로도 기대하지 못할 수 있습니다. 'A'(원 자성)의 경우 많은 NoSQL DB는 제한된 거래 형태를 제공하기 때문에 한 계좌에서 금액을 인출하고 다른 계좌에서 금액을 인출 할 수 있습니다. 이들은 100 개의 오브젝트가 포함 된 임의의 복잡한 거래를 지원하지 않습니다. –

-1

예 데이터가 손실되고 바보가 단지 경미한 거래에 사용하는 위험이 있습니다.

3

모든 RDBMS 사용자는 하늘이 ACID없이 떨어질 것이라고 생각하지만, 대부분의 NoSQL 사용자는 "내 응용 프로그램이 ACID로 더 좋을 것"이라고 생각하지 않아도 최종 사용자 응용 프로그램을 행복하게 배포하고 지원할 수 있습니다.

(참고 : What Applications Don't Need ACID?이 대답은 내가 매우 비슷한 질문에 준 것과 유사하다)

되는 NoSQL 데이터베이스의 대부분은 'D'를 가지고 (내구성) 특성 : 전원의 예상치 못한 손실이 떠나 NoSQL 트랜잭션이 어떤 의미에서 '작다'라는 경고와 함께 커밋 된 트랜잭션이 데이터베이스에 분명하게 나타납니다. 그래서 "No": 일반적인 NoSQL 데이터베이스는 데이터를 잃지 않습니다.

대부분의 NoSQL 데이터베이스에서 제한된 버전의 원자 번호 & 격리 등을 사용할 수 있지만 임의의 복잡성이있는 트랜잭션을 구현하려면 기하 급수적 인 노력이 필요합니다. 따라서 ACID가 아닌 데이터베이스를 사용하여 은행 시스템을 구현할 수있는 이유가 없습니다. 대부분의 NoSQL 데이터베이스는 하나의 계정에서 돈을 공제하고 다른 계정에 돈을 더하는 마이크로 트랜잭션을 사용할 수있게합니다. 시스템의 총 금액. (그러나 반대로, 나는 은행 업무 응용 프로그램이 이 아니라이 아니라면 Google AppEngine에 기록 될 수 있다고 생각합니다. 이는 단일 사용자의 은행 계좌가 될 '복잡한 객체'내에서만 트랜잭션이 작동하기 때문입니다.

는 실제 사례의 맥락에서이 문제를 논의하기 위해, 나는 우리의 응용 프로그램을 설명 할 것이다. 우리 회사는 주로 시간 지정을위한 고교에 소프트웨어를 판매하지만 롤 콜 (line-call), 교사 부재/교체, 여행 및 방 예약 관리를 담당합니다. 우리의 소프트웨어는 내부적으로 만 사용 가능한 Mrjb라는 사내 개발 된 비 ACID 데이터베이스 엔진을 기반으로하며 NoSQL 데이터베이스의 전형적인 제한 사항이 있습니다.

최종 사용자와 관련하여 ACID와 NoSQL의 차이점의 예는 2 명의 사용자가 정확히 같은 시간에 동일한 롤을 표시하려고하면 최종 결과가 될 가능성이 매우 낮습니다 두 사용자가 제출 한 데이터의 조합 ACID 데이터베이스는 최종 결과가 한 사용자의 데이터인지 다른 사용자의 데이터인지를 보증하거나 한 사용자의 업데이트가 실패하고 오류 메시지를 사용자에게 반환 할 수 있습니다.

이 경우 사용자가 "부재"상태가 모두 한 사용자의 업데이트 또는 두 가지가 혼합 된 상태인지 여부는 사용자가 신경 쓰지 않을 것이라고 생각합니다. 두 사용자의 입력에 반하는 것입니다. 이 예제는 실제로 발생해서는 안되며, 그렇다면 실제로 어떤 경쟁자에 대한 정답이없는 "경쟁 조건"입니다.

질문은 우리는 "학생 객체가 해당 가족 객체 없이는 존재할 수 없습니다해야한다"등의 제약 조건을 구현할 수있어 여부에 대한 우리의 Mrjb 데이터베이스에 관련하여 제기되었다. ('ACID'의 'C'= 일관성). 사실 마이크로 트랜잭션의 또 다른 예인이 제약 조건을 유지하고 유지할 수 있습니다. 매일 시간표의 기반이되는 순환 학교 시간표 (일반적으로 2 주주기)의 새 버전을 업로드 할 때

또 다른 예입니다. 이 업데이트 트랜잭션을 아토믹하게 만들거나 다른 트랜잭션을이 업데이트와 별도로 실행할 수있게하는 것은 어렵습니다. 따라서 우리는 기본적으로이 중요한 거래가 일어나는 동안 "세계를 멈추게"하거나 약 2 초가 걸리거나 학생이 사전 업데이트와 사후 업데이트 데이터의 조합을 포함하는 시간표를 인쇄 할 가능성을 허용하도록 선택할 수 있습니다. 아마 이것이 발생할 수있는 100ms 창). "세계를 멈추게하십시오"옵션은 아마 더 나은 옵션 일 수 있습니다. 그러나 실제로 우리는 후자를합니다. 혼합 된 시간표는 업데이트 전 시간표보다 나쁘다고 주장 할 수 있습니다. 그러나 두 경우 모두 시간표가 변경되었음을 학생들에게 알리는 절차가있는 학교에 의존해야합니다. 즉, 오래된 시간표에서 일하는 학생 어느쪽으로 든 큰 문제입니다.

저희 회사는 여기에 설명되어 있습니다 : http://edval.com.au 그리고 우리의 NoSql 기술은 여기 기술되어 있습니다 : http://www.edval.biz/memory-resident-programming-object-databases.

관련 문제