2012-02-07 11 views
27

Non sono abbastanza sicuro di aver capito cosa sia un Eventstore, l'ho pensato come una sorta di "Transactionlog" per Domainobjects. Quali sono i vantaggi/svantaggi di esso e quali sono i buoni scenari per usarlo e quando non dovrebbe essere usato?Quando utilizzare un Eventstore

EDIT:

Dal momento che può chiedere troppo, sarei felice se ci sarebbe stato un "semplice" scenario quando utilizzare un eventstore e quando non? In altre parole: è possibile descrivere i 2 scenari in alcune frasi o devo leggere 5 libri per comprenderlo?

risposta

42

Sì, il sourcing di eventi è come un log delle transazioni per gli oggetti del dominio e il log delle transazioni è la fonte autorevole di tutti i dati. Potresti avere copie dei dati in altre forme progettate per una semplice query ma sono semplicemente copie che possono essere cancellate e ricostruite in qualsiasi momento. Il log delle transazioni è l'unica fonte di verità.

Sono d'accordo con Craig che è difficile rispondere alla sua domanda succintamente perché è molto dipendente dal contesto, ma ecco un breve elenco di motivi per cui si potrebbe considerare l'utilizzo di un negozio di evento:

  • Vi preoccupate di fare analisi storica complessa dei tuoi dati. Ad esempio, qualcuno potrebbe venire da te in futuro e chiedere: "Quanti dei nostri clienti hanno inserito un articolo nel loro carrello della spesa, poi lo hanno tolto, ma dopo aver inviato loro un coupon, sono tornati e l'hanno comprato?" Ci può essere una fornitura infinita di tali domande di BI e non è possibile anticiparle tutte in anticipo. Se si acquisiscono tutti gli eventi nel sistema, è possibile ricostruire la risposta a qualsiasi domanda futura.
  • Allo stesso modo, ti interessa auditing ed essere in grado di dimostrare senza dubbio esattamente chi ha cambiato quali dati a che ora e perché. Il tuo archivio eventi è il registro di controllo.
  • Ti interessa avere un sistema altamente scalabile. Poiché il modello di scrittura di un archivio eventi è solo append, può essere adatto per applicazioni ad alto volume. Poiché non è intrinsecamente relazionale, di solito può essere partizionato facilmente.

D'altra parte, ci sono alcune buone ragioni per non farlo:

  • Non hai nessuna delle esigenze di cui sopra.
  • Non si vuole affrontare il problema di dover creare strumenti di debug per poter visualizzare e modificare facilmente i dati nell'archivio eventi.
  • Stai costruendo un progetto di breve durata che non ti aspetti da molto tempo per cui non vuoi investire un sacco di sforzi in architettura.
  • Non sei preparato ad apprendere CQRS, DDD ed EDA contemporaneamente al sourcing di eventi. Queste idee non sono strettamente necessarie per l'approvvigionamento di eventi, ma sono spesso intrecciate e il vero valore si trova quando cambi completamente il tuo paradigma e le usi tutte insieme. Il sourcing degli eventi fa parte di un pacchetto di tecniche che insieme rappresentano un modo molto diverso di pensare all'architettura del software. Può essere intimidatorio.
+1

Grazie per la tua risposta, poiché era esattamente ciò di cui avevo bisogno (alcuni esempi "semplici" per/contro l'utilizzo di un eventstore). –

18

Questo è molto da chiedere in una domanda StackOverflow. Una cosa che manca alla tua domanda è quali sono i suoi svantaggi? Comunque, piuttosto che rispondere qui, mi piacerebbe fornire alcuni link a video da guardare. C'è un sacco di contesto che deve essere impostato prima che le risposte a questa domanda abbiano un senso.

Greg Young: C'è un video di ~ 2 ore here che fornisce una panoramica di tutto ciò che si chiede nella tua domanda. Esiste anche una lezione online di ~ 6 ore here.

Udi Dahan: C'è un video 1 ora here che offre una prospettiva su quando utilizzare queste tecnologie.

Mailing List: C'è un gruppo here dove puoi chiedere tutte le tue domande e fare una bella discussione sull'argomento.

Spero che questo sia utile. C'è così tanto carico nella tua domanda che non penso che possa fare a te o a chiunque altro alcunché per cercare di rispondere in una breve diatriba e fuorviare la gente.


Aggiornamento: Non penso che sia necessario leggere 5 libri o anche visualizzare i video di seguito. Penso che valga la pena spendere il tuo tempo per farlo, ma non è necessario. Il problema con la tua domanda è che in genere gli scenari "semplici" non hanno bisogno di sourcing di eventi. La maggior parte delle applicazioni sarà principalmente CRUD e basata sui dati. Forse questa è una risposta alla tua domanda. Se non c'è molto "comportamento" nel tuo sistema, allora non ne hai bisogno. Se c'è un sacco di comportamenti, allora potresti averne bisogno.

+0

Grazie per la risposta, i collegamenti hanno aiutato (anche se penso che ne conoscessi già la maggior parte). Ho appena visto il tuo aggiornamento nella risposta, che ha aiutato di più. Ho alzato la tua risposta, ma penso che la risposta di Eric Lee si adatti meglio alla mia domanda. –

Problemi correlati