Ich lerne NoSQL und suche nach verschiedenen Optionen für eine der Anforderungen meines Kunden. Ich habe verschiedene Ressourcen durchgesehen, bevor ich diese Frage gestellt habe (eine Person mit geringen Kenntnissen in NoSQL).
- Ich muss Daten schneller speichern und Daten lesen.
- Völlig ausfallsicher und leicht skalierbar.
- Kann Daten nach Analytics durchsuchen.
Am Ende hatte ich eine kurze Liste von: Cassandra and Elasticsearch
Was ich verstehe ist, dass Cassandra eine perfekte NoSQL-Speicherlösung für mich ist, da ich Daten mithilfe von Indizes schreiben und lesen kann. Wo es fehlschlägt oder fehlschlagen könnte, ist in Analytics. Wenn ich in Zukunft Daten von from_date to to_date
oder mehr Möglichkeiten zum Abrufen von Daten für Analysen abrufen möchte, wenn ich das Datenmodell nicht richtig entwerfe oder langfristig nicht im Auge habe, was in einer sich ständig verändernden Welt möglicherweise recht schwierig ist.
Während Elastic Search
ist am besten bei der Indizierung (unterstützt von Lucene), und kann die Daten zufällig durchsuchen, indem Sie zufälligen Text werfen. Aber funktioniert es genauso, auch wenn ich Daten abrufen möchtefrom_date to to_date
(ich gehe davon aus, dass dies der Fall sein könnte). Die eigentliche Frage ist jedoch, ob es sich um eine Suchmaschine oder einen perfekten NoSQL-Datenspeicher wie Cassandra handelt. Wenn ja, warum brauchen wir dann noch Cassandra?
Wenn sich beide in einer anderen Welt befinden, erklären Sie das bitte! Wie kombinieren wir sie, um eine effektivere Lösung zu erhalten?
quelle
Antworten:
Eine unserer Anwendungen verwendet Daten, die sowohl in Cassandra als auch in ElasticSearch gespeichert sind. Wir verwenden Cassandra, um auf diese Datensätze zuzugreifen, wann immer wir können, und lassen Daten in Abfragetabellen duplizieren, um bestimmte anwendungsseitige Anforderungen zu erfüllen. Für eine liberalere Suche, als unsere Abfragetabellen zulassen, führt ElasticSearch diese Funktionalität gut aus.
Wir haben dieselbe Frage (an uns selbst) gestellt ... "Warum bekommen wir nicht einfach alles von ElastsicSearch?"
Die Antwort ist, dass ElasticSearch als Suchmaschine und nicht als persistenter Datenspeicher konzipiert wurde. Manchmal verliert ElasticSearch Schreibvorgänge. Schemaänderungen sind in ElasticSearch schwierig durchzuführen, ohne alles wegzublasen und neu zu laden. Zu diesem Zweck habe ich Jobs geschrieben, die ElasticSearch mit unserem Cassandra-Cluster synchron halten sollen. Es gab auch eine ziemlich aktuelle Diskussion über Quora zu diesem Thema , die ähnliche Punkte hervorbrachte .
Trotzdem funktioniert ElasticSearch hervorragend als Suchmaschine. Und Cassandra eignet sich hervorragend als skalierbarer Hochleistungs-Datenspeicher. Das Abfragen von Daten unterscheidet sich jedoch von der Suche nach Daten. Es gibt Zeiten, in denen wir das eine oder andere brauchen, und eine Kombination aus beiden funktioniert gut für unsere Anwendung. Es kann gut für Sie funktionieren (oder auch nicht).
In Bezug auf die Analyse hatte ich einige Erfolge bei der Verwendung des Cassandra Spark-Connectors, um komplexere OLAP-Abfragen zu bearbeiten. Hoffentlich hilft das.
Bearbeiten Sie 20200421
Ich habe eine neuere Antwort auf eine ähnliche Frage geschrieben:
ElasticSearch vs. ElasticSearch + Cassandra
quelle
Cassandra + Lucene ist eine großartige Option. Für dieses Problem gibt es verschiedene Initiativen, zum Beispiel:
quelle
Nachdem ich selbst an diesem Problem gearbeitet habe, habe ich festgestellt, dass NoSQL-Datenbanken wie casandra gut sind, wenn Sie sicherstellen möchten, dass Sie Ihr Datenschema mit zuverlässigen Schreibvorgängen beibehalten und die von elasticsearch angebotenen Indizierungsvorgänge nicht nutzen möchten. Wenn Sie einige Indexdaten beibehalten möchten, ist elasticsearch gut, wenn Sie Ihrem Schema vertrauen und nur weit mehr Lese- als Schreibvorgänge ausführen.
Mein Fall war Datenanalyse. Daher habe ich viele meiner Latices bei der elastischen Suche beibehalten, da ich später viel durch die Daten gehen wollte, um zu sehen, was mein nächster Schritt sein sollte. Ich hätte casandra verwendet, wenn ich viele Änderungen im Schema der Daten in meinen analytischen Pilelines haben wollte.
Es gibt auch viele nette Darstellungswerkzeuge wie Kibana, mit denen Sie Ihre Daten mit guten Grafiken präsentieren können. Vielleicht bin ich faul, aber sie sehen sehr gut aus und haben mir geholfen.
quelle
Das Speichern von Daten in einer Kombination aus Cassandra und ElasticSearch bietet Ihnen die meisten Funktionen. Sie können damit nach Schlüsselwerttabellen suchen und Daten in Indizes suchen.
Die Kombination bietet Ihnen viel Flexibilität, ideal für Ihre Anwendung.
quelle
Elassandra ist die kombinierte Lösung von Cassandra + Elastic Search. Es verwendet Elastic Search, um die Daten zu indizieren, und Cassandra als Datenspeicher. Ich bin mir nicht sicher über die Leistung, aber gemäß diesem Artikel ist die Leistung gut.
Wenn Ihre Anwendung eine Suchfunktion benötigt, ist Elassandra die beste Open Source-Option. Die DSE-Suche ist verfügbar, aber teuer.
quelle
Wir hatten eine Anwendung entwickelt, in der wir Elasticsearch und Cassandra verwendeten. Ähnliche Daten wurden in Cassandra gespeichert und in Elasticsearch indiziert.
Die Benutzeroberfläche unserer Anwendung verfügte über Funktionen wie Suchen, Aggregationen, Datenexport usw. Die Back-End-Microservices erhielten kontinuierlich riesige Daten (zu Kafka-Themen) und speicherten sie in Cassandra. Sobald die Daten in Cassandra gespeichert sind, stellen die Dienste sicher, dass die Daten in Elasticsearch indiziert sind.
Cassandra fungierte als "Quelle der Wahrheit" für Elasticsearch. In den Fällen, in denen eine Neuindizierung des ES-Index erforderlich war, haben wir Cassandra abgefragt und die Daten in ES neu indiziert.
Diese Lösung hat uns geholfen, da dies sehr einfach zu skalieren war und die Suche und Aggregation viel schneller war.
quelle
quelle
Cassandra ist großartig darin, Daten per ID abzurufen . Ich weiß nicht viel über die Leistung von Sekundärindizes, aber ich bezweifle, dass sie so schnell ist wie Elasticsearch. Sicherlich gewinnt Elasticsearch, wenn es um die Volltextsuche geht ( Textanalyse , Relevanzbewertung usw.).
Cassandra gewinnt auch bei der Update-Leistung . Elasticsearch unterstützt Updates, aber ein Update ist wirklich ein Reindex + Soft Delete in einer atomaren Operation.
Cassandra hat ein sehr schönes Replikationsmodell (wenn Sie besonders ausfallsicher sein müssen). Elasticsearch ist auch in Ordnung, ich bin nicht im Lager, das sagt, dass ES besonders unzuverlässig ist (es gibt manchmal Probleme, wie bei jeder Software).
Elasticsearch verfügt auch über Aggregationen für Echtzeitanalysen. Und weil die Suche so schnell ist, ist die Analyse einer Teilmenge von Daten schnell .
Wenn Ihre Anforderungen von einem von ihnen gut genug erfüllt werden (wie hier scheint es, als würde ES gut funktionieren), würde ich nur eine verwenden. Wenn Sie Anforderungen aus beiden Welten haben, können Sie entweder:
quelle