En ce qui concerne la performance, à condition que vous utilisez du matériel de taille appropriée, vous ne devriez pas avoir des problèmes d'indexation des documents 1M par heure. J'ai couru Elasticsearch bien au-dessus de cela sans problèmes. Il y a une writeup détaillée ici que vous trouverez peut-être utiles concernant l'étalonnage et le dimensionnement d'un grand groupe ElasticSearch:
ElasticSearch setup for a large cluster with heavy aggregations
Pour un système de mise en cache éphémère avec un TTL de seulement 3 heures, je suis d'accord que ce serait une perte pour stocker les données dans plusieurs référentiels. Vous pouvez stocker les données dans Couchbase et les répliquer dans Elasticsearch en temps réel ou presque, mais pourquoi s'en soucier? Vous ne savez pas quel avantage vous obtiendriez d'avoir les données dans les deux endroits.
Pour des problèmes de performances concernant votre cas d'utilisation spécifique, je suggère fortement d'effectuer une analyse comparative. Une des forces d'Elasticsearch (et de Solr aussi) que j'ai découvertes est leur (étonnamment forte) performance lors de la recherche sur plusieurs champs non textuels. Vous avez tendance à penser à ES à des fins de recherche de texte (où il excelle), mais c'est aussi une bonne base de données à usage général. J'ai trouvé que, en particulier, il a de bonnes performances lors de la recherche sur plusieurs paramètres par rapport à d'autres solutions NoSQL.
Personnellement quand l'analyse comparative ES dans ce cas d'utilisation je regarde un certain nombre de différentes options d'indexation.ES prend en charge TTL pour les documents afin de purge automatiquement le cache est 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
Cependant, vous pouvez jouer avec ayant des indices pour chaque chaque heure - une chose à propos de ES (en raison de c'est l'utilisation de Lucene en dessous pour l'indexation et le stockage de fichiers) qui supprime le travail différemment de la plupart des bases de données. Les documents sont marqués comme supprimés mais pas supprimés, puis périodiquement les fichiers situés en dessous (appelés segments) seront fusionnés, moment auquel de nouveaux segments seront créés sans les documents supprimés. Cela peut entraîner une bonne quantité d'activité de disque pour les cas d'utilisation intensive à fort volume dans un seul index. Le moyen de contourner cela est de créer un nouvel index pour chaque heure, puis de supprimer l'index dans son intégralité après que les données sont âgées de plus de 3 heures.
Vous pouvez trouver cette discussion précédente sur les TTL par rapport à des indices de séries chronologiques en ElasticSearch utiles: Performance issues using Elasticsearch as a time window storage
Enfin, en ce qui concerne l'échelle horizontale facile ElasticSearch est assez bonne ici - vous ajoutez un nouveau nœud avec le nom du cluster correct et ES s'occupe du reste, en migrant automatiquement les fragments vers le nouveau noeud. Dans votre cas d'utilisation, vous souhaiterez peut-être jouer avec le facteur de réplication, car plus de répliques sur plusieurs noeuds sont un moyen facile d'améliorer les performances des requêtes.
Les requêtes changent-elles à la volée ou vont-elles toujours interroger les mêmes propriétés avec à peu près les mêmes valeurs? – scalabilitysolved
le système sur lequel je travaille est "tour agrégator/search" et les éléments de données sont des visites contenant: departuredate, depatturecountry, durée, resort, hotelCategory, type de repas, prix, hôtel, etc. ville de départ à pays concret (ou station) dans la plage de dates de départ concrète. – dimzon