ホームページ >バックエンド開発 >Golang >エラー時の mongodb トランザクションのロールバックを省略することは良い習慣ですか?

エラー時の mongodb トランザクションのロールバックを省略することは良い習慣ですか?

WBOY
WBOY転載
2024-02-06 10:12:08471ブラウズ

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

質問内容

golang driverを使用していますgo.mongodb.org/mongo-driver/mongomongodbトランザクションを学習しています。私はこれに従っているので、githubにあるこの回答とこの例を参照してください。

@simagix が提供するサンプルコード:

リーリー

どちらの例でも、エラーが発生してもロールバックされません。これがデモサンプルであることは承知しています。しかし、コードで同じことを行うと、正常に動作します。

エラー発生時のロールバックを省略することはできますか(ドライバーが処理しますか)?それとも何かが足りないのでしょうか?


正解


##mongo.withsession() アクティブなトランザクションを想定していません。「のみ」役立ちます。指定されたセッションのコールバックを実行します。したがって、開始されたトランザクションの一部として実行したい場合は、コミットを処理して自分で中止する必要があります。これにより、より細かい制御が可能になります。

ただし、コールバックをトランザクションとして実行する場合は、

session.withtransaction() を使用してください。これは、トランザクションとそのライフサイクルを透過的な方法で処理するためです。これにより、トランザクションが作成されます。コールバックによって返されたエラーに基づいて、送信または中止します。追加機能として、再試行も処理できます。ドキュメントでも次のように指摘されています:

コールバックが失敗した場合、ドライバーは aborttransaction を呼び出します。

これは、トランザクション内でコールバックを正しく実行する方法の簡単な例です:

リーリー

以上がエラー時の mongodb トランザクションのロールバックを省略することは良い習慣ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。