長期トランザクション


この記事は「メモ」です。後で調べたいことに関するリンクや、軽い説明を残しておくことを目的としています。内容が少なくなっていますがご了承ください。

長期トランザクション(LLT: Long Lived Transaction)は複数のデータベーストランザクションにまたがるトランザクションのことを言う(参考:Long-lived transaction – Wikipedia)。

Wikipedia には出典が書かれていないが、もともとは Sagas (サーガ)という記事に出てくる言葉らしい。

Hector Garcia-Molina、Kenneth Salemによる「Sagas」で初めて概要が説明されたアイデアの中核は†4、「長期トランザクション」(LLT:Long Lived Transaction)という操作を処理する最善の方法に関するものです。このようなトランザクションは、長時間(数分、数時間、あるいは数日)かかり、そのプロセスの一部としてデータベースへの変更を必要とする場合があります。

O’Reilly Japan – マイクロサービスアーキテクチャ 第2版 (oreilly.co.jp), Sam Newman

ソフトウェアにおいてトランザクションと言うとデータベーストランザクションの事と思いがちだが、ここで言うトランザクションは、より一般的な「取引」と置き換えると分かりやすい。システムトランザクションとビジネストランザクションと言って区別しているケースもある(参考: 『Patterns of Enterprise Application Architecture』Fowler Martin著 https://a.co/ioh2igZ)。

データベーストランザクションは (データベースによるが) ACID 特性を備えており、トランザクションの完了まで排他ロックをかけたりする。もちろんこれはロックをかけている間、ほかのトランザクションの操作は受け付けない。数秒ならばそれでもいいかもしれないが、1時間や1日といった長い時間ロックすることは想定されていない。

一般的な「取引」においては即座に処理できないものもある。ユーザー操作を待つ場合や複数システムをまたぐ処理などが考えられる。ブログのようなシステムであれば、ユーザーが記事を書き終わるまで待たなければならない(関連:楽観的オフラインロック)し、EC のようなシステムであれば注文してから決済が完了するまで時間がかかったりする。決済方法がコンビニや銀行振り込みであれば、ユーザーが入金をするための外出を決意をするまで数日待つことになる可能性もある。そもそも、注文・在庫管理・発送・決済でシステムが分かれていて、データベーストランザクションを使えないかもしれない(関連:分散トランザクション)。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください