2013-10-19 12 views
37

Vorrei sapere quali sono i vantaggi dell'utilizzo di EventStore (http://geteventstore.com) sull'implementazione dell'evento in un MongoDb.EventStore vs. MongoDb

Il motivo per cui lo chiedo è che la nostra azienda ha un numero di persone che lavora quotidianamente con MongoDb. Tuttavia non funzionano con Event Sourcing. Anche se non sono completamente all'oscuro sull'argomento, non stanno per iniziare a implementarlo da nessuna parte.

Sto per iniziare un progetto, che è perfettamente adatto per Event Sourcing. Ci sono circa 16 eventi ben definiti e circa 7 proiezioni ben definite. Dico "circa" perché so che ci sarà richiesta di più proiezioni ed eventi quando vedranno il prodotto in uso.

L'approccio sarà prima API, con un AEST REST che altre parti della nostra organizzazione stanno per consumare.

Mentre ho letto molto su Event Sourcing come Greg Young lo definisce, non ho mai implementato una soluzione Event Sourcing.

Questo è un progetto di campo verde. Nessuna restrizione tecnologica poiché stiamo per esporre tutto come interfaccia REST. Quindi, se qualcuno ha esperienza di lavoro con EvenStore o Event Sourcing con MongoDb, per favore mi illumini.

Anche una domanda quasi non correlata su Event Sourcing: Avete mai interrogato direttamente l'event store? O creeresti sempre nuove proiezioni e replay evento per popolare quelle proiezioni?

risposta

6

Visto che le altre risposte non parlano degli strumenti o dei vantaggi in EventStore e si riferiscono solo ai vantaggi di MongoDB, interverrò. Ma nota che la mia esperienza è limitata.

Comincerò con i contro ...

  • Ci sono un sacco di check-in, che possono portare a decidere quale versione si sta andando a sostenere attivamente se stessi. Mentre il team ha consolidato le loro versioni, che sono arrivati ​​alla versione 3 nemmeno 18 mesi dopo il rilascio dovrebbe essere un indicatore del fatto che devi recuperare la versione che stai supportando per un'altra versione più recente (che può anche avere un impatto sulla piattaforma scegli di distribuire a).
  • Non funzionerà facilmente su tutte le piattaforme (soprattutto se si sta tentando di spostarsi in un ambiente cloud o in un contenitore lxc basato su finestra mobile). Alcuni di questi sono dovuti alla comunità che circonda altri DB come Mongo. Ma il team sembra aver lavorato a lungo sulle prestazioni in lettura/scrittura mantenendo la stabilità della piattaforma incrociata. Col passare del tempo ho scoperto che non si vuole allontanarsi troppo dall'implementazione del sistema operativo bare metal che oggi non è attraente.
  • Utilizza una versione speciale di Mono. Trovare supporto per le versioni precedenti di Mono serve solo a rendere il processo più di un canale principale.
  • Per sfruttare al meglio le prestazioni di EventStore è necessario pensare alla propria architettura. Gli output di EventStore su file flat e dati sugli eventi possono crescere abbastanza velocemente. Qual è il tasso di errore dei dischi in cui stai persistendo i tuoi dati. Come sono compresse le cose? archiviato? ecc. Hai un sacco di controllo e il controllo è orientato verso la memorizzazione dei dati come eventi. Tuttavia, mentre sono certo che Greg Young stesso potrebbe citarmi nella mia tomba le caratteristiche che ottimizzano e salvano i tuoi dischi a lungo termine, trovo più che probabile trovare una comunità Mongo matura che abbia avuto esperienza nell'esecuzione di casi simili.

E i pro ...

  • RESTful - È AtomPub. Il tuo stream non è abbastanza specifico? Creane un altro e fai http fino a quando il tuo cuore si accontenta. Preoccupato per il routing fare un http forward. Preoccupato per la sicurezza mette davanti un proxy http. Semplice!
  • Hai una bella suite di strumenti e UI per testare e costruire le tue proiezioni quando i tuoi eventi iniziano a generare nuovi dati (ad esempio, usa chrome browser come un modo per eseguire il debug delle tue proiezioni ... ya sono scritte con java script)
  • Prestazioni di lettura - Poiché l'applicazione restituisce un file flat, è possibile ottenere il caching a livello di kernel ed esporli tramite http nella goccia di un cappello. Inoltre, gli indici sono all'interno dei tuoi stream per l'interrogazione delle proiezioni rispetto a set di dati più grandi (ma ho davvero la sensazione che le performance dell'indice si insinueranno nel tuo tempo nel tempo).

Personalmente non lo userei per un'applicazione core/mission critical o in crescita! Tuttavia, se si dispone di una custodia laterale per mantenere il vostro ambiente evento interessante, allora darei il via! Io personalmente devo attenermi a Mongo per ora.

39

responsabilità Sono Greg Young (se non riesci a leggere il mio nome :))


ho intenzione di rispondere a questa domanda anche se credo che sarà probabilmente ottenere eliminato comunque. Questa domanda da sola per me è un po 'strana, ma le risposte sono piuttosto bizzarre. Non mi prenderò il tempo di rispondere a ciascuna risposta individualmente, ma inserirò invece tutti i miei commenti in questa risposta.

1) C'è un commento che eseguiamo solo su una versione personalizzata di mono che è un dettaglio ma ... Questo non è il caso (e non è stato per più di un anno). Stavamo aspettando le patch critiche che abbiamo fatto su mono (ad esempio threadpool.c per colpire il loro master). Questo è successo.

2) EventStore è concesso in licenza BSD a 3 clausole. Non sei sicuro di come potresti affermare che non siamo Open Source. Abbiamo anche una società dietro di esso e forniamo supporto commerciale.

3) Qualcuno ci ha menzionato sulla versione 3 in settembre. La versione 1 è stata rilasciata 2 anni fa. La versione 2 ha aggiunto Clustering (ovviamente alcune modifiche di rottura rispetto a un singolo nodo). La versione 3 sta aggiungendo un sacco di cose tra cui la capacità di avere consumatori in competizione. In questo periodo molto poco è cambiato in termini di protocollo client reale (specialmente per quelli che usano l'API HTTP).

Ciò che è veramente inquietante per me nelle raccomandazioni è che non sembrano capire cosa stanno confrontando. Sarebbe più o meno l'equivalente di me che dice "Quale dovrei usare neo4j o leveldb?". Potresti costruirti un database grafico su leveldb ma sarebbe un bel po 'di lavoro.

Mongo in questo caso sarebbe un motore di archiviazione nel negozio di eventi che l'OP avrebbe dovuto scrivere da solo. La scrittura di un negozio di eventi di qualità di produzione è un esercizio non banale su un motore di archiviazione se si desidera avere anche le operazioni di base.

ho scritto this in response to the mailing list equivalent of this question:

Come pensate di fare quanto segue con Mongo?:

scrivere e leggere gli eventi da/per corsi d'acqua con ordinamento/concorrenza ottimistica/etc

Poi:

vostre proiezioni non vogliono leggere i flussi nello stesso modo in cui sono stati scritti, le proiezioni sono normalmente interessato ai tipi di eventi e desidera tutti gli eventi di tipo T indipendentemente dal flusso scritto e nell'ordine corretto.

Probabilmente si desidera anche per esempio la possibilità di passare dal vivo da notifiche di eventi spinto al trattamento tirato informazioni (ad esempio polling), ecc

Avrebbe più senso se Kafka, datomic, e evento di archivio venivano rispetto.

+3

So che sei un grande sostenitore dello strumento giusto e Kafka è più un confronto diretto. Ma dove il caso precedente si riferisce al sourcing di eventi, posso vedere persone ragionare su Mongo perché non ha definito molta complessità con le letture. Mongo gli dà qualche giocata + non deve pensare a come suonerà la sua configurazione TTL (o nel caso in cui Kafka debba configurare ZooKeeper). Ho dovuto fare un passo indietro da EventStore a causa del tempo e iniziare a pensare a Mongo per le letture di eventi semplici. Nel frattempo mancano gli aggiornamenti di versione. felice di sentire che la versione mono è stata spostata in avanti. In attesa di vNext con MS .Net – baseman

+3

Grazie per la tua risposta Greg. Il progetto è stato posticipato, ma insieme ai miei colleghi sviluppatori, abbiamo esaminato un po 'di più. Ha fatto un piccolo prototipo e ha deciso su EventStore. Non sono sicuro di dove leggi che io sostengo che EventStore non è open source. Il fatto che sia open source è la ragione per cui è anche considerato. Per quanto riguarda il confronto tra mele e arance, ciò sarebbe dovuto al fatto che semplicemente non lo sapevo. –

+0

@JayPete Ho ricevuto una notifica su questo che mi ha indotto a tornare e vedere il tuo commento proprio ora. La parte OSS della mia risposta era per il commento in fondo votato non la tua domanda originale. –

Problemi correlati