2010-04-16 7 views
26

.NET에서 MongoDB 및 NoRM으로 둘러보기.MongoDB transactions?

저를 혼란에 빠뜨린 것 - 거래가 없습니다
(그냥 MongoConnection.Begin/EndTransaction 또는 그와 비슷한 것을 말할 수는 없습니다).

무언가가 실패 할 경우를 대비하여 작업 단위 패턴과 롤백 변경을 사용하고 싶습니다.

ITransaction을 사용하여 내 저장소를 풍성하게하는 방법이 아직 깨끗한가요?

답변

28

MongoDB는 복잡한 다중 문서 트랜잭션을 지원하지 않습니다. 그것이 당신이 절대적으로 필요로하는 것이라면 아마도 그것은 아마도 당신에게 적합하지 않을 것입니다.

그러나 대부분의 경우 복잡한 거래는 필요하지 않습니다. MongoDB의 모든 작업은 하나의 문서에서 원 자성 (atomic)이며, 구현하기 쉽고 (그리고 빠르며) 트랜잭션을 필요로하는 많은 작업을 수행하는 nice update modifiers을 지원합니다.

+0

'업데이트 수정 자'부분을 얻지 못했습니다. 그들이 정확히 어떻게 도울 수 있습니까? (내가 완전한 새내기임을 명심하십시오 :) –

+1

업데이트 수정자를 사용하면 하나의 작업으로 원자 적으로 특정 복잡한 작업을 수행 할 수 있습니다. "이 필드의 값을 x만큼 증가"또는 "새 값을 이 배열 ". – mdirolf

+0

@mdirolf 그가 거래에 의존하는 시나리오에 빠지면 하나의 리펙터를 사용해야합니까? – Tushar

17

MongoDB는 기본적으로 트랜잭션을 지원하지 않지만 사실대로 낙천적 인 트랜잭션을 구현할 수 있습니다. 그들은 작업 단위를 잘 맞 춥니 다. 당신이 C#에서 쉽게 반복 할 수 있도록 GitHub에 대한 자바 예제와 설명을 썼습니다.

+2

이것은 정말 좋은 예입니다. 전환 가능한 추상화/플러그인 인 경우에도 MongoDB 내부에서는 이러한 방식으로 구현되지 않습니다. – gertas

+1

대단히 감사합니다. 감사합니다. 내가 할 수 있다면 +10. – jcollum

+0

mongodb에서 트랜잭션이 필요한 경우 소프트웨어 설계/아키텍처 – dit

1

기록을위한 몇 가지 메모. MongoDB의 트랜잭션을 지원하지 않지만

, 그것은 atomicity on a single document 지원

MongoDB를 하나의 문서 내에서 원자 작업에 대한 지원을 가지고있다. 중첩 된 문서에서 제공하는 가능성을 고려할 때이 기능은 많은 유스 케이스를 지원합니다.

또한 "Isolate Sequence of Operations"에 대한 수동 입력이 흥미로울 수 있습니다. 예 :

그러나 격리 연산자를 사용하여 여러 문서에 영향을주는 단일 쓰기 작업을 격리 할 수 ​​있습니다.

0

대신 MongoDb TokuMX를 사용할 수 있습니다.

http://www.tokutek.com/products/tokumx-for-mongodb/

TokuMXTM

는 오픈 소스 극적 기본 MongoDB에 비해 성능 및 작동 효율을 개선하여 MongoDB 고성능 분포. TokuMX는 MongoDB의 드롭 인 대체품이며 20 배의 성능 향상, 데이터베이스 크기의 90 % 감소 및 MVCC를 사용한 ACID 트랜잭션 지원을 제공합니다.

1

MongoDB는 다중 문서 ACID 트랜잭션을 지원합니다 (2018 년 여름 출시 예정). 스냅 샷 격리를 통해 트랜잭션은 데이터의 전체적으로 일관된 뷰를 제공하고 데이터 무결성을 유지하기 위해 전부 또는 일부 실행을 시행합니다. 더 많은 정보와 베타는 https://www.mongodb.com/transactions

을 참조하십시오.이 blog post에서 역사 및 추론에 관심이있는 경우 ACID 트랜잭션을 다중 문서화하는 방법에 대해서도 설명합니다.

1

MongoDB 4.0은 다중 문서 트랜잭션에 대한 지원을 추가합니다.

https://www.mongodb.com/transactions

+0

을 다시 생각해보십시오. 링크를 제공하는 대신 핵심 텍스트를 답안에 입력하십시오. 그렇지 않으면 링크가 끊어지면 답을 잃어 버릴 것입니다! :) – sniperd