저는 golang 드라이버go.mongodb.org/mongo-driver/mongo
를 사용하여 mongodb 트랜잭션을 배우고 있습니다. 나는 이것을 따르고 있으므로 github에 대한 답변과 이 예제가 있습니다.
@simagix가 제공한 샘플 코드:
으아아아두 예 모두 오류가 발생하면 롤백되지 않습니다. 나는 이것이 데모 샘플이라는 것을 알고 있습니다. 하지만 코드에서 동일한 작업을 수행하면 제대로 작동합니다.
오류 발생 시 롤백을 생략할 수 있나요(드라이버에서 처리하나요?) 아니면 내가 뭔가를 놓치고 있는 걸까?
mongo.withsession()
은 활성 트랜잭션을 가정하지 않으며 특정 세션에서 콜백을 실행하는 데 "만" 도움이 됩니다. 따라서 시작된 트랜잭션의 일부로 실행되도록 하려면 커밋을 처리하고 직접 중단해야 합니다. 이를 통해 보다 세밀한 제어가 가능해졌습니다.
그러나 콜백을 트랜잭션으로 실행할 계획이라면 session.withtransaction()
을 사용하세요. 트랜잭션과 수명 주기를 투명한 방식으로 처리하기 때문입니다. 트랜잭션을 생성하고 콜백에서 반환된 오류에 따라 트랜잭션을 커밋하거나 중단합니다. 추가 기능으로 재시도도 처리할 수 있습니다. 문서에서도 다음과 같이 지적합니다.
콜백이 실패하면 드라이버는 aborttransaction을 호출합니다.
다음은 트랜잭션 내에서 콜백을 올바르게 실행하는 방법에 대한 간단한 예입니다.
으아아아위 내용은 오류 발생 시 mongodb 트랜잭션 롤백을 생략하는 것이 좋은 습관입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!