データベース選択ガイド
このガイドでは、MBC CQRS ServerlessフレームワークでDynamoDBに直接クエリする場合とRDS(Prisma経由)を使用する場合の判断基準を説明します。
CQRSデータフローの概要
CQRSパターンでは、書き込み操作(コマンド)と読み取り操作(クエリ)は、それぞれの目的に最適化された異なるデータストアで別々に処理されます。
データフローの説明
- コマンドパス: 書き込み操作は
CommandServiceを通じてDynamoDB コマンドテーブルに保存されます - イベント同期: DynamoDB StreamsがData Sync Handlerをトリガーします
- 二重ストレージ: データはDynamoDB データテーブルとRDSの両方に同期されます
- クエリパス: 読み取り操作は
DataService(DynamoDB)またはPrismaService(RDS)を選択します
データベースの特性
DynamoDB
| 特性 | 説明 |
|---|---|
| アクセスパターン | キーベースのルックアップ(pk, sk) |
| クエリタイプ | キーによる取得、ソートキー条件付きパーティションキーによるクエリ |
| 強み | ミリ秒単位のレイテンシ、自動スケーリング、コネクション管理不要 |
| 制限 | JOINなし、限定的なフィルタリング、全文検索なし |
RDS (PostgreSQL/MySQL)
| 特性 | 説明 |
|---|---|
| アクセスパターン | SQLベースのクエリ |
| クエリタイプ | 複雑なフィルター、JOIN、集計、全文検索 |
| 強み | 柔軟なクエリ、リレーショナル整合性、強力なフィルタリング |
| 制限 | コネクション管理が必要、Data Sync Handlerの設定が必要 |
判断マトリクス
このマトリクスを使用して、どのデータベースにクエリすべきかを素早く判断できます:
| クエリシナリオ | DynamoDBを使用 | RDSを使用 |
|---|---|---|
| pk + skで単一アイテムを取得 | はい | いいえ |
| pkでskプレフィックス付きアイテムをリスト | はい | いいえ |
| 複数のキー以外の属性でフィルター | いいえ | はい |
| 全文検索 | いいえ | はい |
| 複数エンティティのJOIN | いいえ | はい |
| 集計(COUNT, SUM, AVG) | いいえ | はい |
| キー以外の属性でソート | いいえ | はい |
| 総件数付きページネーション | 限定的 | はい |
| 複雑なWHERE条件(OR, LIKE) | いいえ | はい |