DynamoDBとRDSの同時利用によるCQRS実装アーキテクチャを考える
watarukura.iconユニケージのレベルデータ概念を参考にRESTなAPIサーバの実装を考える
Command
APIサーバへはJSONをPOSTする
クレジットカード情報などは非保持とする必要があるため除外するか、マスクする
保持されたJSONファイルからAPIサーバへのリクエストを再現できるように実装する
この時点ではDynamoDBの利点を活かし、非正規化データで構わない
書き込み速度の早さ、テーブル単位でprovisioningできるDynamoDBの特性を活かす
24時間程度のTTLを設定し、データの肥大化を防ぐ
同時にFIFO-SQSへenqueueする
DynamoDB Streams+Lambdaでも良いが、順序だっている方が後々楽だと想定
Event-Sourcing
FIFO-SQSをポーリングして取得したキューの情報からRDSへデータを書き込む ← Level2データ Query
DynamoDBとRDSからそれぞれデータを取得。原則RDSのマテビューから取得とし、マテビュー未反映のレコードはDynamoDBから取得する
マテビュー未反映かの判定のため、DynamoDBのsort keyとしてtimestampを設定し、マテビュー側の更新時刻より新しいレコードがあればDynamoDB側を使用する
懸念事項
トランザクション制御はどうする?
参考