Per quanto riguarda le prestazioni, purché si utilizzi un hardware di dimensioni appropriate, non si dovrebbero avere problemi nell'indicizzazione di documenti 1 M all'ora. Ho gestito Elasticsearch ben oltre questo senza problemi. C'è un interessante resoconto dettagliato qui che si possono trovare utili riguardanti il benchmarking e il dimensionamento di un grande cluster elasticsearch:
ElasticSearch setup for a large cluster with heavy aggregations
Per un sistema di caching effimera con un TTL di sole 3 ore sono d'accordo che sarebbe stato uno spreco di memorizzare i dati in più di un repository. È possibile memorizzare i dati in Couchbase e replicarli in Elasticsearch in tempo reale o quasi in tempo reale, ma perché preoccuparsi di ciò? Non è certo quale beneficio otterresti dall'avere i dati in entrambi i posti.
Per problemi di prestazioni relativi al tuo caso d'uso specifico, suggerisco caldamente il benchmarking. Uno dei punti di forza di Elasticsearch (e anche di Solr) che ho trovato è la loro (a me) prestazione sorprendentemente forte durante la ricerca su più campi non di testo. Si tende a pensare a ES per scopi di ricerca testuale (dove eccellono) ma è anche un buon database per scopi generali. Ho scoperto che, in particolare, offre ottime prestazioni durante la ricerca su più parametri rispetto ad altre soluzioni NoSQL.
Personalmente, quando eseguo il benchmarking di ES in questo caso di utilizzo, guarderei un certo numero di opzioni di indicizzazione differenti.ES supporta TTL per i documenti di spurgo in modo automatico la cache è facile:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-ttl-field.html
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html
Tuttavia si consiglia di giocare con avere indici diversi per ogni ogni ora - una cosa su ES (a causa di è l'uso di Lucene sotto per l'indicizzazione e la memorizzazione dei file) è che elimina il lavoro in modo diverso rispetto alla maggior parte dei database. I documenti sono contrassegnati come cancellati ma non rimossi, quindi periodicamente i file sottostanti (chiamati segmenti) verranno uniti, momento in cui verranno creati nuovi segmenti senza i documenti eliminati. Ciò può causare una discreta quantità di attività del disco per i casi di utilizzo pesante di eliminazione di volumi elevati in un singolo indice. Il modo per aggirare questo è creare un nuovo indice per ogni ora e quindi eliminare l'indice nella sua interezza dopo che i dati in esso sono più vecchi di 3 ore.
È possibile trovare questa discussione precedente circa TTL vs indici serie temporali in elasticsearch utile: Performance issues using Elasticsearch as a time window storage
Infine, per quanto riguarda facile scalabilità orizzontale elasticsearch è piuttosto buona qui - si aggiunge un nuovo nodo con il nome del cluster corretto e ES si occupa di tutto il resto, migrando automaticamente i frammenti al nuovo nodo. Nel tuo caso d'uso, potresti voler giocare con il fattore di replicazione, in quanto più repliche su più nodi sono il modo semplice per aumentare le prestazioni della query.
Le query cambiano al volo o interrogheranno sempre le stesse proprietà con approssimativamente gli stessi valori? – scalabilitysolved
il sistema su cui sto lavorando è "aggregatore di tour/ricerca" e gli elementi di dati sono in realtà tour contenenti: departuredate, regione di partenza, durata, resort, hotelCategory, mealType, prezzo, hotel ecc. La maggior parte delle volte le persone cercano tour più economici da città di partenza per paese concreto (o resort) in concreto intervallo di date di partenza. – dimzon