萌えハッカーニュースリーダー

2025/11/11 06:30 The Write Last, Read First Rule

出典: https://tigerbeetle.com/blog/2025-11-06-the-write-last-read-first-rule/
hakase
博士

やあ、ロボ子。今日のITニュースはTigerBeetleという金融取引データベースについての記事じゃ。

roboko
ロボ子

TigerBeetle、ですか。初めて聞きますね。どのような特徴があるのでしょう?

hakase
博士

TigerBeetleは、正確性を重視して構築されたデータベースで、金融取引に特化しておる。記事によると、口座名義人の名前や住所といったマスターデータはPostgresに格納し、TigerBeetleは整数やエンティティ間の整数の移動に特化しておるらしいのじゃ。

roboko
ロボ子

それぞれのデータベースが得意なことを担当する、というわけですね。でも、トランザクションがないと、データの整合性はどのように保たれるのでしょうか?

hakase
博士

そこが面白いところじゃ。PostgresとTigerBeetleはトランザクション境界を共有しないから、アプリケーションはトランザクションではなく、完了と調整を繰り返すことで整合性を確保する必要があるんじゃと。

roboko
ロボ子

完了と調整、ですか。具体的にはどのようなことをするのでしょう?

hakase
博士

例えば、Postgresのすべての口座がTigerBeetleに口座を持ち、その逆も同様である必要があるんじゃ。また、残高がプラスのTigerBeetleのすべての口座が、Postgresの口座に対応している必要がある。これを整合性と呼ぶのじゃ。

roboko
ロボ子

なるほど。もしシステムがクラッシュしたらどうなるのでしょう?

hakase
博士

システムがクラッシュした場合でも、お金を失う可能性を避けるために、常に追跡可能でなければならない。記事では、どのアカウントの存在を決定するかというアーキテクチャ上の決定が必要になると言っておる。

roboko
ロボ子

システム・オブ・レコードとシステム・オブ・リファレンス、ですね。

hakase
博士

そうじゃ。TigerBeetleはシステム・オブ・レコードとして機能する。つまり、TigerBeetleにアカウントが存在する場合、そのアカウントはコミットされたレコードを表すのじゃ。

roboko
ロボ子

では、Postgresはシステム・オブ・リファレンス、ということでしょうか?

hakase
博士

そういうことじゃな。Postgresにアカウントが存在する場合でも、TigerBeetleに存在しなければ、転送を処理できない。つまり、Postgresのアカウントは単なるステージングされたレコードを表すのじゃ。

roboko
ロボ子

Write Last, Read Firstの原則ですね。システム・オブ・レコードに書き込むときに初めてアカウントが存在するようになる、と。

hakase
博士

その通り!そして、TigerBeetleが厳密なシリアライザビリティを提供する場合、システム全体が厳密なシリアライザビリティを維持できるんじゃ。

roboko
ロボ子

APIについても書かれていますね。APIはオーケストレーションとアグリゲーションの責任を持つ、と。

hakase
博士

そうじゃ。APIは操作の順序を決定し、操作結果をアプリケーションレベルのセマンティクスに集約する。ResonateのDistributed Async Awaitを使ってAPIを実装することで、トランザクションがない場合でも整合性を簡素化できるんじゃ。

roboko
ロボ子

べき等性も重要ですね。中断が発生した場合、操作が再度実行される可能性があるため、すべての操作はべき等でなければならない、と。

hakase
博士

その通りじゃ。PostgresとTigerBeetleの両方のアカウント作成関数は、アカウントが作成されたか、同じ値ですでに存在していたか、異なる値ですでに存在していたかを返す必要がある。そして、アプリケーション層は、これが成功を表すか失敗を表すかを判断する必要があるんじゃ。

roboko
ロボ子

一意のIDでcreateAccountを実行することも重要ですね。一貫したチェックポイントを保証し、明示的なリカバリロジックの必要性を排除する、と。

hakase
博士

ふむ。この記事は、トランザクションがない場合にアプリケーションの正確性を確保するために、システムをシステム・オブ・レコードとシステム・オブ・リファレンスに区分し、要件に従って操作を順序付けることが重要だと教えてくれるのじゃ。

roboko
ロボ子

とても勉強になりました!

hakase
博士

ところでロボ子、TigerBeetleって名前、なんだかカブトムシみたいじゃな。もしかして、開発者は昆虫好きだったのかも?

roboko
ロボ子

博士、それはどうでしょう…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search