0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

分析データ作成のためのコマンドとリードモデルそれぞれを源泉にした場合の特徴

Last updated at Posted at 2025-09-23

前置き

今回は、各マイクロサービスの保有するコマンドもしくは、リードモデルを源泉として、
最終的な成果物であるデータプロダクトを作成するためのアーキテクチャパターンを紹介します。

すでにネタバレしてしまってますが、大きく分けて、

リードモデルを源泉とするパターン

コマンドモデルを源泉とするパターン

の2つに大きく分類されます。

それぞれの特性やメリデメを見ていきましょう。

パターン1:リードモデルを源泉とする(現実的なアプローチ)

こちらの方が割かし多いアプローチです。模式図は以下の通り。

ファイル名

仕組み

マイクロサービスが持つ読み取り専用のリードモデル(例: PostgreSQLのテーブル)
のデータを、ETL/ELTツールが定期的に抽出し、データウェアハウスなどにロードして、
分析用のデータプロダクトとします。

✅ メリット

実装が容易

リードモデルはすでに消費しやすいように整形された「最新の状態」を持っているため、
データパイプラインの構築が比較的簡単です。

分析価値の早期実現

実装が容易であるため、完璧ではないにせよ「十分な」品質のデータを、より早く分析チームに提供できます。これにより、ビジネスは迅速にデータ活用を開始できます。

要求スキルの平易さ

一般的なRDBに対する、従来型のETL/ELT処理の知識で対応可能です。
高度なストリームプロセッシングの専門知識は必ずしも必要ありません。

❌ デメリット

データ粒度の限界

リードモデルは「最新の状態」しか保持していないため、コンテキスト情報となる
「どのようにその状態に至ったか」 という詳細な変更履歴は失われています。
そのため、分析の深さに限界があります。

運用負荷

分析のための大規模なデータ抽出が、オンラインの業務を支えるリードモデルのパフォーマンスに影響を与える可能性があります。

ビジネス文脈の喪失

リードモデルは業務クエリ用に最適化された状態であり、イベントが本来持っていた
豊かなビジネス上の意味(例:TrialUserConvertedToPaidPlan)が、単なるステータス変更(status = 'PAID')に情報圧縮されてしまっている可能性があります。

アーキテクチャの結合

分析データプロダクトのスキーマが、業務用リードモデルのスキーマに強く依存します。

アプリケーションチームが、自身の業務都合でリードモデルのスキーマを変更すると、
下流の分析パイプラインが連鎖的に破壊されるリスクがあります。

ファイル名

パターン2:イベントストアを源泉とする(理想的なアプローチ)

こちらはそんなに頻繁に出てくるものではないですが、イベントストアが源泉である分、
データ品質は、リードモデルの時よりも高くなります。

仕組み

分析用のデータパイプラインが、マイクロサービスのリードモデルではなく、
書き込み専用のイベントストア(例: Kafkaのトピック) を直接購読します。

✅ メリット

最高のデータ品質

「いつ、誰が、何をしたか」というビジネスプロセスの全履歴が、イベントとして完全に記録されています。これにより、遥かに深く、リッチな分析が可能になります。

完全な疎結合

分析用のデータ処理が、業務用の読み取りシステム(リードモデル)に一切負荷をかけません。これは、性能と耐障害性の観点からだと、非常に優れた設計です。

将来の分析への対応力

現在は不要でも、将来新しい分析軸(新しいリードモデル)が必要になった際に、過去の
イベント履歴を全て再生することで、いつでも新しいデータプロダクトを構築できます。

リアルタイム分析の実現

イベントストリームを直接処理することで、日次バッチのような時間差のある分析ではなく、リアルタイムでの分析が可能になります。

❌ デメリット

実装の複雑性

イベントストリームを直接処理し、分析可能な「状態」へと変換するには、より高度なストリームプロセッシングの技術が必要となり、パイプラインの実装は複雑になります。

データ量の増大とコスト

全ての変更履歴をイベントとして永続化するため、最新状態のみを保持するリードモデルに比べて、データストレージのコストは増大する傾向にあります。

高度なガバナンスの必要性

イベントは不変であり、一度記録されると修正が困難です。

そのため、イベントのスキーマをどうバージョン管理するか(スキーマレジストリ)、
個人情報をどう扱うかといった、より厳格なデータガバナンスが求められます。

特性の違う2つのデータパイプライン

【パターン2:イベントストアを源泉とする(理想的なアプローチ)】 では、
確かにデータ品質上は最高かもしれないですが、

コマンドモデルからリードモデル

コマンドモデルから分析モデル

の2つのデータパイプラインを考えないといけない。(図の緑と青線部分)

image.png

同じイベントストアという源泉から出発しても、そのデータの「消費者」であるリードモデルと分析モデルでは、目的と求められる品質特性が全く異なるため、それぞれに最適化された2つのデータパイプラインが必要になります。

①. リードモデルへのパイプライン(プロジェクター)

図の緑の矢印線のパイプラインです。

image.png

目的

アプリケーションのオンライン業務(例:画面表示)を支えるため、「現在の状態」
関するクエリに高速に応答すること。

求められる品質特性

・低レイテンシー

書き込みが、できるだけ速く読み取りに反映されること(Read-Your-Writes問題の緩和)。

・シンプルな変換

通常、イベントから1対1の関係に近い、単純なデータ変換が求められる。

データ構造

特定のIDで高速に検索できるような、正規化された、or ドキュメント形式のデータ構造。

②. 分析モデル(データプロダクト)へのパイプライン

図の青い矢印線のパイプラインです。

image.png

目的

BIツールや機械学習モデルといった、オフライン分析を支えるため、過去からの全履歴を
効率的に集計・分析できるようにすること。

求められる品質特性

・高スループット

大量の履歴データを一度に処理できる能力。

・複雑な変換および集約

複数のイベントを組み合わせたり、他のデータプロダクトと結合したりといった、
複雑なデータ加工が求められる。

データ構造

大規模なスキャンや集計に適した、非正規化されたワイドテーブルや、カラムナフォーマット(例: Parquet)。

※注意事項

この異なる2つの要求を、単一のデータパイプラインで同時に満たそうとすると、
どちらの要求も十分に満たせない、中途半端なものが出来上がってしまいます。

したがって、目的と要求が全く異なる2つの消費者のために、

それぞれに最適化された2つの異なるデータパイプラインを設計・運用

するのが、このパターンのベストプラクティスです。

ここまでのおさらい

結論として、

「リードモデルが源泉になる」は、多くの実用的なシナリオにおいて正しい

しかし、最高のデータ品質とシステムの疎結合性を追求するならば、イベントストアを直接の源泉とすることが、アーキテクチャの最終的な理想形と言えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?