In Bezug auf die Leistung sollten Sie keine Probleme bei der Indizierung von 1 Mio. Dokumenten pro Stunde haben. Ich habe Elasticsearch gut darüber ohne Probleme laufen lassen. Es gibt eine detaillierte writeup hier, dass Sie nützlich in Bezug auf Benchmarking finden können und eine große Elasticsearch Cluster Sizing:
ElasticSearch setup for a large cluster with heavy aggregations
Für ein ephemere Caching-System mit einem TTL von nur 3 Stunden, die ich damit einverstanden ist eine Verschwendung wäre, zu speichern, die Daten in mehr als einem Repository. Sie könnten die Daten in Couchbase speichern und in Echtzeit oder nahezu in Echtzeit in Elasticsearch replizieren, aber warum sollten Sie sich damit beschäftigen? Nicht sicher, welchen Nutzen Sie daraus ziehen würden, die Daten an beiden Orten zu haben.
Bei Leistungsproblemen, die Ihren spezifischen Anwendungsfall betreffen, würde ich Ihnen ein Benchmarking dringend empfehlen. Eine Stärke von Elasticsearch (und auch Solr), die ich gefunden habe, ist ihre (für mich) überraschend starke Leistung bei der Suche in mehreren Nicht-Textfeldern. Sie neigen dazu, an ES für Textsuchzwecke zu denken (wo es sich auszeichnet), aber es ist auch eine anständige Allzweckdatenbank. Ich habe festgestellt, dass es im Vergleich zu einigen anderen NoSQL-Lösungen eine starke Leistung bei der Suche nach mehreren Parametern bietet.
Persönlich beim Benchmarking von ES in diesem Anwendungsfall würde ich eine Reihe von verschiedenen Indizierungsoptionen betrachten.ES unterstützt TTL für Dokumente so automatisch den Cache Spülen ist einfach:
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
auch immer Sie mit mit verschiedenen Indizes für jede jede Stunde spielen, um möchten - eine Sache, über ES (aufgrund es ist die Verwendung von Lucene darunter für die Indizierung und Dateispeicherung) ist das löscht Arbeit anders als die meisten Datenbanken. Dokumente werden als gelöscht markiert, aber nicht entfernt. Anschließend werden die darunter liegenden Dateien (Segmente genannt) regelmäßig zusammengeführt. Zu diesem Zeitpunkt werden neue Segmente ohne die gelöschten Dokumente erstellt. Dies kann zu einer beträchtlichen Menge an Festplattenaktivitäten führen, die in einem einzelnen Index große Anwendungsfälle mit hohem Volumen löschen. Der Weg dazu besteht darin, für jede Stunde einen neuen Index zu erstellen und dann den Index in seiner Gesamtheit zu löschen, nachdem die darin enthaltenen Daten mehr als 3 Stunden alt sind.
Sie können diese vorherige Diskussion über TTL-Zeit-Serie Indizes in Elasticsearch nützlich finden: Performance issues using Elasticsearch as a time window storage
schließlich in Bezug auf einfache horizontale Skalierung Elasticsearch ist ziemlich gut hier - Sie einen neuen Knoten mit dem richtigen Clusternamen und ES hinzufügen kümmert sich um den Rest und migriert Shards automatisch auf den neuen Knoten. In Ihrem Anwendungsfall möchten Sie möglicherweise mit dem Replikationsfaktor spielen, da mehr Repliken über mehrere Knoten hinweg die einfache Möglichkeit bieten, die Abfrageleistung zu steigern.
Werden die Abfragen im laufenden Betrieb geändert oder werden immer dieselben Eigenschaften mit ungefähr denselben Werten abgefragt? – scalabilitysolved
das System, an dem ich arbeite, ist "Tour Aggregator/Suche" und Daten Elemente ist eigentlich Touren enthalten: Abflug, Entlandung, Dauer, Resort, HotelKategorie, MealType, Preis, Hotel etc. Die meisten Menschen suchen die günstigsten Touren von Beton Abfahrtsort in konkretes Land (oder Resort) in konkreter Abflugszeit. – dimzon