Sto costruendo un'applicazione basata su CQRS con Kafka Streams. Per la maggior parte delle entità nella mia applicazione ciò implica il sourcing di eventi: catturare mutazioni di stato come eventi e trasformarli in uno stato che può essere interrogato. Gli eventi sono archiviati per sempre in modo che possano essere rielaborati nello stato.
Tuttavia, una delle mie entità cambia frequentemente. È un tipo di "Messaggio". L'utente finale apporta modifiche alla bozza del messaggio nell'interfaccia utente e queste modifiche vengono trasmesse al back-end come patch. L'interfaccia utente esegue automaticamente il salvataggio dopo alcuni secondi di inattività dell'utente. Così come l'utente modifica un messaggio, vengono generati molti eventi di patch. Immagino che un messaggio possa coinvolgere centinaia o migliaia di mutazioni.
Mi chiedo, dovrei memorizzare tutti questi eventi? Posso altrettanto facilmente memorizzare solo lo stato mutato per questa entità e risparmiare spazio. In alternativa, posso memorizzare tutti gli eventi di patch, ma poi devo memorizzare tutti questi eventi che probabilmente non saranno utili per la mia ripetizione. Almeno, non riesco a pensare a nessuna ragione per cui dovrei rivederli. Ma ... chi lo sa? Non riesco a immaginare di preoccuparmi di ogni messaggio mentre si evolve, ma allo stesso tempo mi chiedo, rimpiangerò di non aver memorizzato queste mutazioni come eventi?
Che cosa dovrei fare? Memorizza tutti gli eventi o solo lo stato?