簡単におさえましょう!
イベントソーシングとは?
まずは簡単に概要を抑えます。
- イベントソーシングはアプリケーション開発における概念
- ステートソーシングが対立概念
- イベントを中心としたデータの取り扱いを示す
現在多くの環境で使われているのがステートソーシング(state sourcing)という考え方のため、まずはこれについて知りましょう。
ステートソーシングとは?
ステートソーシングとはステート(state)つまり状態をターゲットにした概念です。
たとえば、あなたはいま銀行にお金をあずけているとします。そしてネットで残高を確認すると10万円と表示されています。これは「預金残高というステートが10万円」であるということを意味しています。
DBの中にはいって確認すれば「あなたの預金残高=10万円」という情報がどこかにあるでしょう。
一方でイベントソーシングの場合は?
イベントソーシングはイベント(event)を中心にした考え方のため、管理方法が異なります。
先ほどの銀行の例で言えば、これまでの入出金(=イベント)を全て記録しておきます。すると、預金残高という情報をDBに持っていなくても全てのイベントを計算すれば預金残高を出すことができます。入出金履歴が載っている通帳を想像するとわかりやすいでしょう。
Gitなどもイベントソーシングですね。なんせ全ての履歴をcommit情報をとして持っていますからね。
イベントソーシングのメリットと使い所
メリット
- 完全な履歴が残る
- いつでも過去に戻れる
- CQRSとの親和性が高い(今回は説明を割愛)
デメリット
- イベントを保存するログが膨大
- 最終結果を得るために毎回リプレイの必要あり
- バージョンアップしたら過去のイベントと整合性をどうとるか
- イベントが一部欠損したらもどせない