2017-11-05 1 views
-1
사이의 요소를 교환

은의 객체를 보자MongoDB를 C# 문서

Document1.Value -= X; 
Document2.Value += X; 

내가 한 번에 두 개의 문서를 선택할 수 있기 때문에 , 나는 두 개의 트랜잭션 (Document1에서 X를 가져와 X를 Document2에 넣는다)로 만들어야한다.

전송 중 위험 (충돌, 전원 차단, 오류 등)을 최소화하는 가장 좋은 전략은 무엇입니까?

답변

0

그것은 완전히 유스 케이스에 따라입니다하지만 그것은이 MongoDB의 문서에 대한 읽을 수있는, 두 단계 커밋 사용하는 것이 일반적입니다 : https://docs.mongodb.com/manual/tutorial/perform-two-phase-commits/

그러나 2 단계 MongoDB를하고 elses의 사용으로 제한되지 않는다 커밋 응용 프로그램에서.

+0

나는이 문서와 비슷한 위치에 '보류'시스템을 가지고 있습니다. Document1의 특정 부분을 Document1의 필드에 넣은 다음 Document2를 업데이트하고 어떻게 진행되었는지에 따라 Document1의 보류를 해제하거나 확인합니다. 하지만 실제로 이상적이 아닙니다. – Thomas

+0

어떤 솔루션을 사용해도 시스템 내에서 복구 가능한 상태를 얻으려고합니다. 전에 슬립 라우팅이나 무용담으로 대기열을 사용했습니다. 귀하의 솔루션이 이상적이지 않은 이유는 무엇입니까? –

+0

즉, 스캔을 수행하고 미완성 상태 인 트랜잭션을 찾을 수있는 도구를 사용해야한다는 것을 의미합니다. 재부팅이 필요한 경우 등에 대비하여 사용할 수 있습니다. 그렇지만 완벽한 솔루션이 없습니다. – Thomas