Perché non dovrei usare ElasticSearch come datastore primario?
Come per tutte le implementazioni di database, dipende davvero dalla vostra specifica applicazione.
ElasticSearch è un ottimo motore di ricerca open source costruito sulla base di Apache Lucene. Le sue caratteristiche e i suoi aggiornamenti gli permettono di agire come un datastore JSON senza schema a cui si può accedere usando sia le query di ricerca che i normali comandi CRUD del database.
Ecco i principali "svantaggi" che vedo:
- Sicurezza - ElasticSearch non fornisce alcuna autenticazione o funzionalità di controllo degli accessi. Ci sono varie aggiunte enterprise e open-source per abilitarlo.
- Transazioni - Non c'è supporto alle transazioni o all'elaborazione sulla manipolazione dei dati. Ci sono alcune API che possono abilitare dei workaround a seconda del caso d'uso.
- Maturità degli strumenti - ES è ancora relativamente nuovo e non ha avuto il tempo di sviluppare librerie client mature e strumenti di terze parti che possono rendere lo sviluppo molto più difficile.
- Grandi calcoli - I comandi per la ricerca dei dati non sono adatti a grandi scansioni di dati con calcoli avanzati sul lato database.
- Disponibilità dei dati - ES rende i dati disponibili "quasi in tempo reale" il che può richiedere ulteriori considerazioni nella tua applicazione (es: pagina dei commenti dove un utente aggiunge un nuovo commento, aggiornando la pagina potrebbe non mostrare effettivamente il nuovo post perché l'indice è ancora in aggiornamento).
- Durevolezza - Backup, affidabilità e durevolezza non sono una priorità così alta come in altri archivi di dati. Tutto per l'indicizzazione, lo stoccaggio e (cosa più critica) il coordinamento dei cluster è sviluppato in-house e soggetto a bug e cattiva architettura. Questo è probabilmente il più importante se avete intenzione di fare di ES lo store primario, dato che perdere i vostri dati non è mai un bene.
Se potete affrontare questi problemi, allora non c'è certo motivo per cui non possiate usare ElasticSearch come store di dati primario. Può effettivamente abbassare la complessità e migliorare le prestazioni non dovendo duplicare i vostri dati a seconda del vostro caso d'uso. Come sempre, valutate i benefici, fate qualche esperimento e vedete cosa funziona meglio per voi.
Aggiornamenti negli anni:
- 2015: ElasticSearch ha fatto molta strada e ora ha caratteristiche migliori, metodi di backup e persino l'indicizzazione in tempo reale. Tuttavia nell'aprile 2015, Kyle Kingsbury (Aphyr) ha fatto un altro test Jepsen di ES v1.5 che mostra ancora problemi di durata: Chiamami forse: Elasticsearch 1.5.0. Questo video del dotScale talk di Kyle nel giugno 2015 mostra maggiori informazioni su Elasticsearch a partire da 13:55
- 2017: Altri 2 anni hanno mostrato molti più progressi per ES con la versione 6.0 che è molto capace e risolve molti dei problemi precedenti. Tuttavia, ES non è ancora completamente affidabile durante le operazioni in cluster e quindi la durabilità dei dati rimane il problema più grande contro il suo essere un datastore primario. Elastic, la società madre, ora ha un'offerta gestita su AWS e GCP, quindi consiglio di usarla per ottenere sicurezza e scalabilità invece di eseguirla da soli.
- 2019: Elastic versione 7 ora ha un sistema di scoperta e coordinamento dei cluster completamente nuovo (chiamato Zen2). E' ancora sviluppato in-house purtroppo, ma questa volta ha modelli formali per convalidare il progetto. Il sistema di storage è ancora lo stesso di prima con aggiornamenti minori, quindi la durabilità dovrebbe essere ancora pesantemente testata con una chiara politica di backup, ma lo stato generale è massicciamente migliorato rispetto ad anni fa.