Voglio sperimentare l'utilizzo di Cassandra come archivio eventi in un'applicazione di approvvigionamento eventi. I miei requisiti per un negozio di eventi sono abbastanza semplici. L'evento 'schema' sarebbe qualcosa di simile a questo:Utilizzo di Cassandra come archivio eventi
- id: l'id di un'entità di radice di aggregazione
- dati: i dati relativi agli eventi serializzati (ad esempio JSON)
- timestamp: quando l'evento si è verificato
- sequence_number: la versione unica della manifestazione
Sono completamente nuovo a Cassandra quindi perdonami per la mia ignoranza in ciò che sto per scrivere. Ho solo due query che vorrei mai eseguire su questi dati.
- Dammi tutti gli eventi per un dato id radice aggregato
- Dammi tutti gli eventi per una data radice globale se dove numero progressivo è> x
La mia idea è quella di creare una tabella di Cassandra in CQL come questo:
CREATE TABLE events (
id uuid,
seq_num int,
data text,
timestamp timestamp,
PRIMARY KEY (id, seq_num));
Questo sembra un modo ragionevole per modellare il problema? E, cosa importante, l'uso di una chiave primaria composta mi consente di eseguire in modo efficiente le query che ho specificato? Ricorda che, dato il caso d'uso, potrebbe esserci un grande numero di eventi (con un diverso seq_num) per lo stesso id radice aggregato.
mia specifica preoccupazione è che la seconda query sta per essere inefficiente in qualche modo (sto pensando di indici secondari qui ...)
Ora che è un anno dopo, sono curioso di sapere come è andato il vostro progetto di sourcing per gli eventi con cassandra. –
Sembra logico che si desideri anche che tutti gli eventi siano in ordine cronologico per ricostruire i modelli di query. Per quello sembrerebbe che cassandra sia piuttosto difficile da gestire. –
Alla fine ho utilizzato Akka Persistence e il plugin per la rivista Cassandra, delegando quindi il processo decisionale dello schema al plugin, piuttosto che progettare il mio schema. Akka Persistence funziona incredibilmente bene come mezzo per implementare DDD utilizzando il modello di attore. Seguendo una singola radice aggregata per approccio di attore persistente (singolo su un intero cluster), assicura che gli eventi siano scritti in ordine cronologico. Consiglio di consultare Akka Cluster Sharding per i dettagli su come garantire un attore unico per radice aggregata su un intero cluster. – DrewEaster