2017-09-08 2 views
0

CQRSとEvent Sourcingを使用する場合、履歴データをどのようにクエリしますか。一例として、収益のレポートを持つタイムシートシステムを構築する場合、各従業員の時間、賃金率、および請求率に対して照会する必要があります。 EmployeeID、PayRate、およびEffectiveDateを持つEMPLOYEE_PAY_RATEテーブル、およびClientID、EmployeeID、Rate、およびEffectiveDateを持つBILL_RATEテーブルがあります。これらのテーブルの発効日は基本的に実行履歴を保持しており、正確に報告することができます。CQRSとEvent Sourcing Query履歴データ

DDD、CQRS、およびEvent Sourcing Routeを利用する場合、どのようにレポートを生成しますか?同じ方法でイベントストアに問い合わせることはできません。私はAxonのようなフレームワークを見てきましたが、報告の観点から行う必要があるかどうかはわかりません。

答えて

2

CQRSとEvent Sourcingを使用する場合、履歴データをどのようにクエリしますか。

ライブデータを照会する方法とほぼ同じです。イベント履歴から必要なビューを作成してから、必要なデータのビューを照会します。

例を借りるには、ビューがEMPLOYEE_PAY_RATEテーブルとBILL_RATEテーブルでサポートされている可能性があります。面白い何かが適切なテーブルを更新するようにイベントを再生します。 TaDa。

ヒストリーレポートのような待ち時間が短い場合、アグリゲーターにバスプッシュイベントを送信するのではなく、履歴アグリゲーターがイベントストアからイベントをプルすることをお勧めします。プルアプローチを使用すると、現在地を把握しやすくなり、多くの作業を繰り返す必要がなくなり、必要なすべてのイベント、注文などを心配する必要がなくなります。

1

レポートは、関連するイベントをリッスンすることによって読み込まれるSQLテーブルなど、イベントの読み取りモデル/投影の単なるレポートです。

テーブルが大きい、つまり多くの従業員の場合は、速くするために、データを非正規化したままにして、joinsを使用しないでください。すべての従業員と1日(または任意の粒度)の従業員ID と名前を含むテーブルに行があり、その日の開始日と終了日、および関連するデータを含む他の列、つまり賃金率。 joinsを避けるために従業員の名前を付け加え、関連する従業員イベント(例えばEmployeeChangedName)を聞いて最新の状態に保ちます。

+0

私はいくつかのイベントの予測が必要です。従業員の請求額は1年間で2〜3回変更され、従業員自身が1〜2賃料を支払う可能性があります。レポートの計算には、タイムシートのエンティティから時間と日付を取得し、適切に計算するためにすべてのデータを交差させる必要があります。まだ実現可能ですか?過去に私はSQLでそれをやっていましたが、複雑ではあるが高速なクエリでした。メモリ内のすべてのことをリソースの観点から問題視しています。 – jkratz55

+0

@ jkratz55なぜ複数の投影? 1つは十分だと思われる。 –

+0

CQRSとEvent Sourcingを行ったことのないコンセプトは理解できないでしょうが、現在のシステムでは、EMPLOYEE、TIMESHEET、EMPLOYEE_PAY_RATE、CLIENT_BILL_RATE、およびPROJECT_ASSIGNMENTテーブルをまとめてレポートを生成しています。タイムシートには、特定の従業員が所属する曜日とプロジェクトの時間があります。 Bill RateとPay Rateテーブルには有効な開始日の列があるため、すべての履歴データがあります。イベントストアを使ってイベントを再生する方法を視覚化することはできないと思います。 – jkratz55

関連する問題