Elasticsearch gegen Cassandra gegen Elasticsearch mit Cassandra

110

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_dateoder 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 Searchist 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?

Reddy
quelle
2
Sie sollten auch DSE Search = Cassandra + solr integriert = das Beste aus beiden Welten berücksichtigen: eine skalierbare Datenbank für den Speicher, die von der Suchleistung von Solr gesteuert wird.
Bereng
1
@Bereng, ich denke DSE ist kommerziell und wir kümmern uns nicht um kommerzielle Software.
Reddy
3
Wenn Sie ein Startup mit einem Nettoumsatz von <2 Millionen US-Dollar sind, können Sie DSE kostenlos nutzen (für mindestens ein oder zwei Jahre).
Aaron

Antworten:

150

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

Aaron
quelle
24
Kann jemand den Unterschied zwischen Abfragen und Durchsuchen der Daten erläutern ?
Dror
21
@dror Wenn Sie beispielsweise die ID (s) Ihrer Daten kennen, fragen Sie einfach danach (Cassandra), und wenn Sie die ID (s) Ihrer Daten nicht kennen, suchen Sie danach (elastische Suche).
Arsenik
2
@Gladwell alles hängt von der Größe Ihrer Daten und der Komplexität Ihrer Abfragen ab. Theoretisch kann Elastic alles. Ich würde jedoch darauf vertrauen, dass Cassandra die Skalierung besser unterstützt, um einen großen Datensatz (für Abfragen) zu unterstützen, als Elastic, insbesondere wenn Sie Multi-Region / DC unterstützen.
Aaron
1
@Aaron ... Skalierung zur Unterstützung eines großen Datensatzes ist das, was diese beiden Engines gut können. Unsere Organisation verwendet die elastische Suche als primäre Datenbank, Alarmierungs-Engine, Analysetool und jetzt, da xpack maschinelles Lernen unterstützt. Es bietet auch Geschäftsstatistiken rund um unseren Rand IOT.
AnthonyJClink
1
@Dror Die eigentliche Frage stellen!
Mike Ezzati
32

Cassandra + Lucene ist eine großartige Option. Für dieses Problem gibt es verschiedene Initiativen, zum Beispiel:

Alvaro Agea
quelle
Eine Sache, die Sie beachten sollten: In 2.1 können Sie jetzt einen benutzerdefinierten Indexer "einfügen". So können Sie beispielsweise nachahmen, was Statio mit der Gabelung C *, jedoch außerhalb der Hauptlinie C * tut. Mir sind keine weit verbreiteten Bemühungen bekannt, aber ich plane, Lucene-Indizes auf diese Weise selbst in C * einzufügen. Für weitere Informationen: issue.apache.org/jira/browse/CASSANDRA-8717
evanv
8

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.

M.Rez
quelle
4

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
4

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.

anavaras lamurep
quelle
1

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.

Summe A.
quelle
0
  • Da elasticsearch auf dem Lucene-Index basiert und Sie die Indizierung in elasticsearch speichern möchten, ist dies im Vergleich zur Indizierung in Cassandra selbst zum Abrufen der Daten am besten.
  • Wenn Ihre Anforderungen nicht mit dem Abrufen in Echtzeit zusammenhängen, können Sie elasticsearch auch als NoSQL-Datenbank verwenden. Es gibt Gedanken, dass ElasticSearch Schreibvorgänge verliert und Schemaänderungen schwierig sind, aber wenn Ihr Datenvolumen nicht zu groß ist. Sie können elasticsearch leicht als Suchmaschine mit der besten Indizierung zusammen mit elasticsearch als aNoSQL-Datenbank erreichen. Es gibt verschiedene Möglichkeiten, dies zu verhindern. Ich habe an den Schemaänderungen in elasticsearch gearbeitet. Wenn Ihre Datenstruktur konsistent ist, entstehen Probleme.
  • Als Unterstützer von ElasticSearch oder SOlr. Ich habe an beiden Suchmaschinen gearbeitet und festgestellt, dass beide Suchmaschinen flüssig verwendet werden können, wenn Sie sie richtig konfigurieren.
  • Nur Nachteile, an die ich denken kann, wenn Sie auf Echtzeitergebnisse abzielen und Ihre Antwort nicht um Millisekunden verzögern können. Dann ist es besser, andere NoSQL-Datenbanken wie Cassandra oder Couchbase zu nutzen.
  • Cassandra mit Solr, arbeiten besser als Cassandra mit ElasticSearch.
vishal yadav
quelle
0

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:

  • Verwenden Sie eine davon und umgehen Sie die Nachteile. Beispielsweise können Sie möglicherweise viele Updates mit Elasticsearch verarbeiten, jedoch mit mehr Shards und mehr Hardware
  • Verwenden Sie beide und stellen Sie sicher, dass sie synchron sind
Radu Gheorghe
quelle