2フェーズコミットトランザクションを実行する方法
注記
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB GraphQL は、2フェーズコミットトランザクションと呼ばれるトランザクションをサポートしています。
2フェーズコミットトランザクションを使用 すると、複数のプロセス/アプリケーション (マイクロサービスなど) にまたがるトランザクションを実行できます。
トランザクションを開始するアプリケーションを「コーディネーター」と名付け、トランザクションに参加するアプリケーションを「参加者」と名付けます。
すべての2フェーズコミット操作では、ミューテーションまたはクエリ操作に @twoPhaseCommit ディレクティブをアノテーションする必要があります。以下は、このような操作の説明です。
トランザクションを開始する
トランザクションを開始するには、パラメータを設定せずに @twoPhaseCommit ディレクティブを追加します。
query some_query @twoPhaseCommit {
# some query
}
開始されたトランザクションのトランザクション ID は、結果の一部である拡張オブジェクトで返されます。
{
"data": {
...
},
"extensions": {
"transaction": {
"id": "the_transaction_id"
}
}
}
トランザクションに参加する (参加者用)
参加者アプリケーションで、コーディネーターアプリケーションによって開始されたトランザクションに参加するには、トランザクション ID を id パラメータで設定し、join パラメータを true に設定します 。
query some_query_from_participant @twoPhaseCommit(id:"the_transaction_id", join:true) {
# some query
}
トランザクションを再開する
開始または結合されたトランザクションで操作の実行を継続するには、@twoPhaseCommit ディレクティブの id パラメータにトランザクション ID 値を設定します。
mutation some_mutation @twoPhaseCommit(id:"the_transaction_id") {
# some mutation
}