>백엔드 개발 >Golang >오류 발생 시 mongodb 트랜잭션 롤백을 생략하는 것이 좋은 습관입니까?

오류 발생 시 mongodb 트랜잭션 롤백을 생략하는 것이 좋은 습관입니까?

WBOY
WBOY앞으로
2024-02-06 10:12:08485검색

在发生错误时省略 mongodb 事务回滚是一个好习惯吗

질문 내용

저는 golang 드라이버go.mongodb.org/mongo-driver/mongo를 사용하여 mongodb 트랜잭션을 배우고 있습니다. 나는 이것을 따르고 있으므로 github에 대한 답변과 이 예제가 있습니다.

@simagix가 제공한 샘플 코드:

으아아아

두 예 모두 오류가 발생하면 롤백되지 않습니다. 나는 이것이 데모 샘플이라는 것을 알고 있습니다. 하지만 코드에서 동일한 작업을 수행하면 제대로 작동합니다.

오류 발생 시 롤백을 생략할 수 있나요(드라이버에서 처리하나요?) 아니면 내가 뭔가를 놓치고 있는 걸까?


정답


mongo.withsession()은 활성 트랜잭션을 가정하지 않으며 특정 세션에서 콜백을 실행하는 데 "만" 도움이 됩니다. 따라서 시작된 트랜잭션의 일부로 실행되도록 하려면 커밋을 처리하고 직접 중단해야 합니다. 이를 통해 보다 세밀한 제어가 가능해졌습니다.

그러나 콜백을 트랜잭션으로 실행할 계획이라면 session.withtransaction()을 사용하세요. 트랜잭션과 수명 주기를 투명한 방식으로 처리하기 때문입니다. 트랜잭션을 생성하고 콜백에서 반환된 오류에 따라 트랜잭션을 커밋하거나 중단합니다. 추가 기능으로 재시도도 처리할 수 있습니다. 문서에서도 다음과 같이 지적합니다.

콜백이 실패하면 드라이버는 aborttransaction을 호출합니다.

다음은 트랜잭션 내에서 콜백을 올바르게 실행하는 방법에 대한 간단한 예입니다.

으아아아

위 내용은 오류 발생 시 mongodb 트랜잭션 롤백을 생략하는 것이 좋은 습관입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제