イベント ソーシング アプリケーションのイベント ストアとして Cassandra を使用して実験したいと考えています。イベント ストアに対する私の要件は非常に単純です。イベント「スキーマ」は次のようになります。
- id : 集約ルート エンティティの ID
- data : シリアル化されたイベント データ (JSON など)
- タイムスタンプ: イベントが発生したとき
- sequence_number : イベントの一意のバージョン
私は Cassandra にまったく慣れていないので、これから書く内容について無知であることをお許しください。このデータに対して実行したいクエリは 2 つだけです。
- 特定の集約ルート ID のすべてのイベントを取得する
- シーケンス番号が > x の場合、特定の集約ルートのすべてのイベントを教えてください
私の考えは、次のように CQL で Cassandra テーブルを作成することです。
CREATE TABLE events (
id uuid,
seq_num int,
data text,
timestamp timestamp,
PRIMARY KEY (id, seq_num) );
これは、問題をモデル化するための賢明な方法のように思えますか? そして重要なのは、複合主キーを使用すると、指定したクエリを効率的に実行できるかどうかです。使用例によっては、同じ集約ルート ID に対して (seq_num が異なる) 多数のイベントが発生する可能性があることに注意してください。
私の具体的な懸念は、2番目のクエリが何らかの形で非効率になることです(ここではセカンダリインデックスについて考えています...)