DynamoDB
概要
MBC CQRS ServerlessはDynamoDBをプライマリデータストアとして使用し、構造化されたテーブル設計を通じてCQRSとイベントソーシングパターンを実装しています。効率的なアプリケーションを構築するには、テーブル構造を理解することが重要です。
テーブルアーキテクチャ
MBC CQRS Serverlessでは、DynamoDBテーブルは以下のタイプに整理されています:
エンティティテーブル
| テーブルタイプ | 命名規則 | 用途 |
|---|---|---|
| コマンドテーブル | entity-command | 書き込みコマンドを保存(書き込みモデル) |
| データテーブル | entity-data | 現在の状態を保存(読み取りモデル) |
| 履歴テーブル | entity-history | イベントソーシング用にすべてのバージョンを保存 |
システムテーブル
| テーブル | 用途 |
|---|---|
tasks | 長時間実行される非同期タスクの情報を保存 |
sequences | ID生成用のシーケンスデータを保持 |
import_tmp | Step Functionsを介したインポート操作用の一時データを保存 |
テーブル定義
テーブル定義はprisma/dynamodbsフォルダに保存されています。新しいエンティティテーブルを追加するには:
ステップ1: 設定でテーブルを定義
prisma/dynamodbs/cqrs.jsonにテーブル名を追加:
["cat", "dog", "order"]
ステップ2: マイグレーションを実行
ローカル開発用:
# Migrate DynamoDB tables only
npm run migrate:ddb
# Migrate both DynamoDB and RDS
npm run migrate
システムテーブル定義
システムテーブル(tasks、sequences、import_tmp)はprisma/dynamodbs/フォルダに独自のJSON定義ファイルがあります。マイグレーション時に自動的に作成されます:
| ファイル | テーブル | 用途 |
|---|---|---|
tasks.json | tasks | DynamoDB Streamsによるタスク管理 |
sequences.json | sequences | シーケンスID生成 |
import_tmp.json | import_tmp | ImportModule用のDynamoDB Streams付き一時インポートデータ |
バージョン情報
import_tmp.jsonテンプレートはバージョン1.1.1で追加されました。それ以前のバージョンでプロジェクトを作成し、ImportModuleを使用している場合は、このファイルを手動で追加する必 要があります。詳細はよくある問題を参照してください。
キー設計パターン
標準キー構造
すべてのテーブルは以下で構成される複合主キーを使用します:
| キー | 形式 | 例 |
|---|---|---|
pk | TYPE#tenantCode | ORDER#ACME |
sk | TYPE#code | ORDER#ORD-000001 |
エンティティキーの例
// Order entity
const orderKey = {
pk: `ORDER#${tenantCode}`,
sk: `ORDER#${orderId}`,
};
// User entity
const userKey = {
pk: `USER#${tenantCode}`,
sk: `USER#${userId}`,
};
// Hierarchical data (e.g., organization)
const departmentKey = {
pk: `ORG#${tenantCode}`,
sk: `DEPT#${parentId}#${deptId}`,
};