Skip to content

Instantly share code, notes, and snippets.

@juno
Created May 2, 2015 10:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save juno/83db2996309d2d3d9ead to your computer and use it in GitHub Desktop.
Save juno/83db2996309d2d3d9ead to your computer and use it in GitHub Desktop.
Event Sourcing.

Event Sourcing

なぜEvent Sourcingを使うのか

Why use Event Sourcing - Arkency Blog

  • Event Sourcingは「現在の状態を保存する」ということに依存しない
  • 新しいコンセプトというわけではない
    • Event Sourcingのように働く現実世界の問題は沢山ある
    • 銀行口座の状態も現在の状態ではなくドメインイベントのログから成り立っている
  • イベントをリプレイすることでどんな時点の状態でも得ることができる
    • 状態変化の理由を知ったり、厄介なエラーのデバッグをやりやすくなったりする
  • ドメインにおける状態の表現とストレージにおける状態の表現に結合はない
  • イベントの保存を行う追加のみのモデルはスケールするのがとても用意なモデルとなる
    • 読み込みモデルを用意することで読み書きの両方で最適なものを得ることができる
    • 読み込みモデルは高速なクエリに特化し、書き込みモデルは書き込みに高度に最適化する
      • 削除が発生しないので書き込みがとても高速になる
  • ハード(hard)データとは別にユーザーの意図(intension)も保存する
    • イベントの順序が保存されることでユーザーが実際に何を行ったのかを分析することができる
  • オブジェクト指向とリレーショナルの間のインピーダンスミスマッチを回避できる
  • 監査ログが得られる
    • Event Sourcingで得られる監査ログはすべての変更を保持している

保存されたドメインイベントをもとに生成される異なるデータモデルを得られることもメリット。 イベントログがあれば、ビジネス要件にあった新しいデータモデルを作ることができる。 リレーショナルデータに限らず、グラフデータやドキュメントモデルなどでもよい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment