2015-04-24 15 views
49

Sto lavorando a un progetto con l'esigenza di creare un dashboard generico in cui gli utenti possono eseguire diversi tipi di raggruppamento, filtraggio e drill down su campi diversi. Per questo stiamo cercando un negozio di ricerca che permetta di tagliare e tagliare i dati.Quanto è affidabile ElasticSearch come datastore principale contro fattori quali perdita di scrittura, disponibilità dei dati

Ci sarebbero più fonti di dati e lo staremmo archiviando nel Search Store. Potrebbe esserci qualche precalcolo richiesto sui dati di origine che può essere eseguito da componenti intermedi.

Ho esaminato diversi blog per capire se ES può essere utilizzato in modo affidabile come archivio principale anche. Dipende principalmente dal caso d'uso che stiamo cercando. Alcune delle informazioni sul caso d'uso che abbiamo:

  • Circa 300 milioni di record all'anno con 1-2 KB.
  • Supponendo di archiviare dati di 1 anno, siamo oggi con 300 GB, ma il caso di utilizzo può arrivare a 400-500 GB, data la crescita dei dati.
  • A partire da ora non è sicuro, come verranno inviati i dati, ma, grosso modo, può arrivare a ~ 2-3 milioni di record ogni 5 minuti.
  • La richiesta di ricerca è bassa, ma richiede query complesse che possono cercare dati per le ultime 6 settimane a 6 mesi.
  • il documento verrà indicizzato in quasi tutti i campi del documento.

Alcuni blog dicono che è abbastanza affidabile da utilizzare come archivio dati primario -

E alcuni blog dire che ES hanno alcune limitazioni -

Qualcuno ha usato elastica ricerca come unica verità di dati senza avere una storage primario come PostgreSQL, DynamoDB o RDS? Ho osservato che ES ha determinati problemi come il cervello diviso e la corruzione dell'indice in cui può esserci un problema con la perdita di dati. Quindi, sto cercando di sapere se qualcuno ha usato ES e ha avuto problemi con i dati

Grazie.

+0

Siamo ai limiti di una decisione progettuale simile con requisiti di dati leggermente più grandi. Prevediamo di supportare ES con Riak oltre alle normali istantanee con il registro Kafka riproducibile. Le cifre decisive nel nostro caso sono due: 1) segmentazione crescente a causa dell'elevato tasso di aggiornamento e 2) impatto delle prestazioni degli aggiornamenti sulle letture. Vi consiglio caldamente di simulare il vostro carico e di eseguire un paio di benchmark. Detto questo, noi (bol.com, il più grande rivenditore online in Olanda e Belgio) ha utilizzato ES 5.x in produzione per 2 anni senza un singhiozzo. Buona fortuna e ci tenga aggiornati sugli aggiornamenti. –

risposta

4

Generalmente è una buona idea progettare soluzioni di archiviazione dati ridondanti. Ad esempio, potrebbe essere un approccio rapido e affidabile prima di tutto spingere tutto come dati flat in un archivio statico come s3, quindi estrarre i dati ES e indicizzare da lì. Se hai bisogno di maggiore flessibilità sfruttando un ORM, potresti avere uno strato RDS o Redshift in mezzo. In questo modo i dati possono sempre essere ricostruiti in ES.

Dipende dalle esigenze e dai requisiti in cui si imposta l'equilibrio tra ridondanza e flessibilità/prestazioni. Se sono coinvolti molti dati, è possibile memorizzare staticamente i dati grezzi e indicarne solo alcune parti tramite ES.

Amazon Lambda offre grandi caratteristiche:

Molti oggetti sviluppatori negozio in Amazon S3 durante l'utilizzo di Amazon DynamoDB per memorizzare e indicizzare i metadati oggetto e attivare la ricerca ad alta velocità. AWS Lambda rende semplice mantenere tutto sincronizzato eseguendo una funzione per aggiornare automaticamente l'indice in Amazon DynamoDB ogni ora aggiunta o aggiornata da Amazon S3.

29

Risposta breve: dipende dal caso d'uso, ma probabilmente non si desidera utilizzarlo come negozio principale.

Risposta più lunga: è necessario comprendere tutti i possibili problemi che possono verificarsi in termini di resilienza e perdita di dati. Elastic ha qualche great documentation of these issues che dovresti veramente capire prima di usarlo come archivio dati primario. Inoltre Aphyr's post on the topic è una buona risorsa.

Se comprendi i rischi che stai assumendo e ritieni che tali rischi siano accettabili (ad esempio perché la perdita di dati di piccole dimensioni non rappresenta un problema per l'applicazione), dovresti sentirti libero di provarlo.

+0

Non sono sicuro delle prestazioni dell'aggiunta di nuovi dati alla ricerca elastica. Poiché tutto deve indicizzare, tutto l'indice correlato dovrebbe essere aggiornato. Tuttavia, potremmo specificare manualmente l'indice di cui abbiamo bisogno in altri No-SQL. Esempio Fox, il documento è {name: "ricky", età: 18}. Potremmo avere solo bisogno di aggiornare l'indice per "nome" in No-SQL, ma dobbiamo aggiornare sia "nome" che "età" nella ricerca elastica. Questo potrebbe essere un potenziale problema di prestazioni. Per favore capiscilo, se sbaglio. –

+0

Ecco un'altra domanda rilevante anche per questo argomento: https://stackoverflow.com/questions/27054954/elasticsearch-vs-cassandra-vs-elasticsearch-with-cassandra – Zsolt