13

私は現在、イベントストアの内部構造を構築する方法を理解しようとしています。私がこれまでに得たもの:

  • イベントストアには2つのテーブル(コレクション、...)があり、1つは集計用、もう1つはイベント用です。
  • 集計テーブルには、次のデータが含まれています:(aggregateIdおそらくGUIDになります)およびaggregateVersion(この集計に影響を与えた最後のイベントの数を単に表す整数です)。
  • イベントテーブルには、次のデータが含まれています:(eventIdここでもGUID)、aggregateId(イベントが属する)、、、payloadおよびversion(イベントの順序を表す単なる整数)。

これは今のところ正しいですか?イベントは整数を使用して順序付けする必要がありますか?または、タイムスタンプに基づいて並べ替える必要がありますか?それぞれの利点は何ですか?欠点は何ですか?

4

4 に答える 4

10

参考までに、ジョナサンオリバーのEventStoreをご覧になることをお勧めします。

SQL永続バージョンでは、テーブルは1つだけです。集約テーブルがなくても簡単に生活でき、aggregateIdをイベントテーブルに格納できます。max()クエリを使用して、最新バージョンを取得できます。

それ以外は、イベントテーブルにヘッダーを含めることを検討する必要があると思います。イベント自体に保存したくない興味深いメタデータが常に存在するからです。

また、イベントテーブルに日付列を追加する必要があると思います。

最後に、イベントがダウンストリームにディスパッチされたかどうかを示す何らかのフラグが必要になる場合があります。この追加により、1つのスレッドまたはプロセスに書き込み、別のスレッドにディスパッチすることができます。

ああ、そこで、私はJonathansEventStoreの構造を提案しました。

于 2012-09-21T12:19:53.277 に答える
4

http://geteventstore.com/をご覧ください-GregYoungによるこのバージョンには、[GitHubのBSD3条項ライセンスを使用して]閲覧できるソースもあります。

于 2012-09-21T12:18:19.433 に答える
4

私はミカエルの答えに多くを加えることはできません。

参考までにもう1つだけあります。数年前、GregYoungはイベントストアの実装についての考えを書き留めました。ドキュメントはhttp://cqrs.wordpress.com/documents/building-event-storage/で見つけることができます

その間に彼のアプローチも進化したと思いますが。

于 2012-09-22T05:28:34.220 に答える
2

アグリゲートはcqrsと関係がありますが、イベントストアとは直接関係ありません。確かに2つのコレクションがありますが、これらはイベントとスナップショットです。詳細については、 https ://github.com/jamuhl/nodeEventStoreをご覧ください。

于 2012-09-21T12:20:27.237 に答える