In letzter Zeit wurde viel über Cassandra gesprochen .
Twitter, Digg, Facebook usw. verwenden es alle.
Wann ist es sinnvoll:
- benutze Cassandra,
- nicht Cassandra verwenden, und
- Verwenden Sie ein RDMS anstelle von Cassandra.
In letzter Zeit wurde viel über Cassandra gesprochen .
Twitter, Digg, Facebook usw. verwenden es alle.
Wann ist es sinnvoll:
Antworten:
Es gibt nichts Schöneres als eine Silberkugel, alles ist darauf ausgelegt, bestimmte Probleme zu lösen und hat seine eigenen Vor- und Nachteile. Es liegt an Ihnen, welche Problemstellung Sie haben und welche Lösung für dieses Problem am besten geeignet ist.
Ich werde versuchen, Ihre Fragen einzeln in der Reihenfolge zu beantworten, in der Sie sie gestellt haben. Da Cassandra auf der NoSQL-Datenbankfamilie basiert, ist es wichtig, dass Sie verstehen, warum Sie eine NoSQL-Datenbank verwenden, bevor ich Ihre Fragen beantworte.
Warum NoSQL verwenden?
Im Fall von RDBMS ist die Auswahl recht einfach, da alle Datenbanken wie MySQL, Oracle, MS SQL und PostgreSQL in dieser Kategorie fast die gleiche Art von Lösungen bieten, die auf ACID-Eigenschaften ausgerichtet sind. Wenn es um NoSQL geht, wird die Entscheidung schwierig, da jede NoSQL-Datenbank unterschiedliche Lösungen bietet und Sie verstehen müssen, welche für Ihre App- / Systemanforderungen am besten geeignet ist. MongoDB eignet sich beispielsweise für Anwendungsfälle, in denen Ihr System einen dokumentenlosen Dokumentenspeicher benötigt. HBase eignet sich möglicherweise für Suchmaschinen, die Analyse von Protokolldaten oder für jeden Ort, an dem das Scannen großer, zweidimensionaler Tabellen ohne Verknüpfung erforderlich ist. Redis wurde entwickelt, um die In-Memory-Suche nach verschiedenen Datenstrukturen wie Bäumen, Warteschlangen, verknüpften Listen usw. zu ermöglichen. Es eignet sich gut für die Erstellung von Echtzeit-Bestenlisten und Pub-Sub-Systemen. Ebenso gibt es andere Datenbanken in dieser Kategorie (einschließlich Cassandra), die für unterschiedliche Problemstellungen geeignet sind. Gehen wir nun zu den ursprünglichen Fragen über und beantworten sie einzeln.
Wann man Cassandra benutzt
Als Teil der NoSQL-Familie bietet Cassandra eine Lösung für Probleme, bei denen eine Ihrer Anforderungen darin besteht, ein sehr schweres Schreibsystem zu haben und zusätzlich zu den gespeicherten Daten ein recht reaktionsschnelles Berichtssystem zu haben. Betrachten Sie den Anwendungsfall der Webanalyse, bei dem Protokolldaten für jede Anforderung gespeichert werden und Sie eine Analyseplattform darauf aufbauen möchten, um Treffer pro Stunde, nach Browser, nach IP usw. in Echtzeit zu zählen. In diesem Blogbeitrag erfahren Sie mehr über die Anwendungsfälle, in die Cassandra passt.
Wann sollte ein RDMS anstelle von Cassandra verwendet werden?
Cassandra basiert auf einer NoSQL-Datenbank und bietet keine ACID- und relationalen Dateneigenschaften. Wenn Sie eine starke Anforderung an ACID-Eigenschaften haben (z. B. Finanzdaten), ist Cassandra in diesem Fall nicht geeignet. Natürlich können Sie eine Problemumgehung dafür finden, aber Sie werden am Ende viel Anwendungscode schreiben, um ACID-Eigenschaften zu simulieren, und verlieren mit der Zeit, um schlecht zu vermarkten. Auch die Verwaltung eines solchen Systems mit Cassandra wäre für Sie komplex und mühsam.
Wann sollte Cassandra nicht verwendet werden?
Ich denke nicht, dass es beantwortet werden muss, wenn die obige Erklärung Sinn macht.
Bei der Bewertung verteilter Datensysteme müssen Sie den CAP-Satz berücksichtigen. Sie können zwei der folgenden Optionen auswählen: Konsistenz, Verfügbarkeit und Partitionstoleranz.
Cassandra ist ein verfügbares, partitionstolerantes System, das eventuelle Konsistenz unterstützt. Weitere Informationen finden Sie in diesem Blogbeitrag, den ich geschrieben habe: Visual Guide to NoSQL Systems .
Cassandra ist die Antwort auf ein bestimmtes Problem: Was tun Sie, wenn Sie so viele Daten haben, dass sie nicht auf einen Server passen? Wie speichern Sie alle Ihre Daten auf vielen Servern und brechen Ihr Bankkonto nicht und machen Ihre Entwickler nicht verrückt? Facebook erhält JEDEN TAG 4 Terabyte neue komprimierte Daten. Und diese Zahl wird höchstwahrscheinlich innerhalb eines Jahres mehr als zweimal zunehmen.
Wenn Sie nicht über so viele Daten verfügen oder Millionen für die Installation von Enterprise Oracle / DB2-Clustern und die für die Einrichtung und Wartung erforderlichen Spezialisten zu zahlen haben, ist die SQL-Datenbank in Ordnung.
Facebook verwendet Cassandra jedoch nicht mehr und verwendet jetzt fast ausschließlich MySQL, um die Partitionierung im Anwendungsstapel nach oben zu verschieben und so eine schnellere Leistung und bessere Kontrolle zu erzielen.
Die allgemeine Idee von NoSQL ist, dass Sie den Datenspeicher verwenden sollten, der für Ihre Anwendung am besten geeignet ist. Wenn Sie eine Tabelle mit Finanzdaten haben, verwenden Sie SQL. Wenn Sie Objekte haben, für deren Zuordnung komplexe / langsame Abfragen erforderlich sind, verwenden Sie ein Objekt oder einen Schlüssel- / Wertspeicher.
Natürlich liegt fast jedes Problem in der realen Welt, auf das Sie stoßen, irgendwo zwischen diesen beiden Extremen, und keine der beiden Lösungen ist perfekt. Sie müssen die Funktionen jedes Geschäfts und die Konsequenzen der Verwendung übereinander berücksichtigen, die sehr spezifisch für das Problem sind, das Sie lösen möchten.
Neben den oben gegebenen Antworten, wann Cassandra verwendet werden soll und wann nicht, sollten Sie in Betracht ziehen, Cassandra nicht selbst zu verwenden, sondern einen der vielen Cousins da draußen.
Einige der obigen Antworten wiesen bereits auf verschiedene "NoSQL" -Systeme hin, die viele Eigenschaften mit Cassandra teilen, mit einigen kleinen oder großen Unterschieden, und für Ihre spezifischen Anforderungen möglicherweise besser als Cassandra selbst sind.
Darüber hinaus wurde kürzlich (einige Jahre nachdem diese Frage ursprünglich gestellt wurde) ein Cassandra-Klon namens Scylla (siehe https://en.wikipedia.org/wiki/Scylla_(database) veröffentlicht. Scylla ist eine Open-Source-Neuimplementierung von Cassandra in C ++, die nach eigenen Angaben einen deutlich höheren Durchsatz und geringere Latenzen als die ursprüngliche Java-Cassandra aufweist und gleichzeitig weitgehend kompatibel ist (in Funktionen, APIs und Dateiformaten). Wenn Sie also bereits über Cassandra nachdenken, sollten Sie auch Scylla in Betracht ziehen.
Wenn Sie mit jemandem sprechen, der gerade Cassandra einsetzt, geht es nicht gut mit den vielen zu vielen um. Sie machen einen Hack-Job, um ihre ersten Tests durchzuführen. Ich habe mit einem Cassandra-Berater darüber gesprochen und er sagte, er würde es nicht empfehlen, wenn Sie dieses Problem hätten.
Sie sollten sich folgende Fragen stellen:
Wenn Sie für eine dieser Fragen "vielleicht" oder "nein" dachten, sollten Sie etwas anderes verwenden. Wenn Sie "Hölle ja" als Antwort auf alle hatten, sollten Sie Cassandra verwenden.
Verwenden Sie RDBMS, wenn Sie alles auf einer Box erledigen können. Es ist wahrscheinlich einfacher als die meisten anderen und jeder kann damit arbeiten.
Neben anderen Antworten ist hier auch eine starke Belastung durch einzelne Abfragen im Vergleich zu einer leichten Last von Millionen Abfragen zu berücksichtigen. Es ist von Natur aus schwieriger, eine einzelne Abfrage in einer Datenbank im NoSql-Stil automatisch zu optimieren. Ich habe MongoDB verwendet und bin auf Leistungsprobleme gestoßen, als ich versucht habe, eine komplexe Abfrage zu berechnen. Ich habe Cassandra nicht benutzt, aber ich erwarte, dass es das gleiche Problem gibt.
Wenn andererseits erwartet wird, dass Ihre Last die von sehr vielen kleinen Abfragen ist und Sie in der Lage sein möchten, sie einfach zu skalieren, können Sie die eventuelle Konsistenz nutzen, die die meisten NoSql-DBs bieten. Beachten Sie, dass die eventuelle Konsistenz nicht wirklich ein Merkmal eines nicht relationalen Datenmodells ist, die Implementierung und Einrichtung in einem NoSql-basierten System jedoch viel einfacher ist.
Für eine einzelne, sehr schwere Abfrage kann jede moderne RDBMS-Engine gute Arbeit leisten, indem sie Teile der Abfrage parallelisiert und so viel CPU und Speicher nutzt, wie Sie darauf werfen (auf einem einzelnen Computer). NoSql-Datenbanken verfügen nicht über genügend Informationen zur Struktur der Daten, um Annahmen treffen zu können, die eine wirklich intelligente Parallelisierung einer großen Abfrage ermöglichen. Sie ermöglichen es Ihnen, problemlos mehr Server (oder Kerne) zu skalieren. Sobald die Abfrage jedoch eine Komplexitätsstufe erreicht, müssen Sie sie manuell in Teile aufteilen, mit denen die NoSql-Engine intelligent umgehen kann.
Nach meiner Erfahrung mit MongoDB konnte Mongo aufgrund der Komplexität der Abfrage letztendlich nicht viel tun, um sie zu optimieren und Teile davon auf mehreren Daten auszuführen. Mongo parallelisiert mehrere Abfragen , ist jedoch nicht so gut darin, eine einzelne zu optimieren.
Lesen wir einige Fälle aus der Praxis:
http://planetcassandra.org/apache-cassandra-use-cases/
In diesem Artikel: http://planetcassandra.org/blog/post/agentis-energy-stores-over-15-billion-records-of-time-series-usage-data-in-apache-cassandra
Sie haben den Grund herausgearbeitet, warum sie sich nicht für MySql entschieden haben, weil die DB-Synchronisation zu langsam ist.
(Auch aufgrund von 2-Phrasen-Commit, FK, PK)
Cassandra basiert auf Amazon Dynamo-Papier
Eigenschaften:
Stabilität
Hohe Verfügbarkeit
Backup funktioniert gut
Lesen und Schreiben ist besser als HBase (BigTable-Klon in Java).
Wiki http://en.wikipedia.org/wiki/Apache_Cassandra
Ihre Schlussfolgerung lautet:
We looked at HBase, Dynamo, Mongo and Cassandra.
Cassandra was simply the best storage solution for the majority of our data.
Ab 2018
Ich würde empfehlen, ScyllaDB als Ersatz für klassische Cassandra zu verwenden, wenn Sie Rückenunterstützung benötigen.
Postgres kv Plugin ist auch schneller als Cassandra. Es wird jedoch keine Skalierbarkeit für mehrere Instanzen geben.
Ich werde mich hier auf einige wichtige Aspekte konzentrieren, die Ihnen bei der Entscheidung helfen können, ob Sie Cassandra wirklich brauchen. Die Liste ist nicht vollständig, nur einige der Punkte, die ich im Kopf habe -
Betrachten Sie Cassandra nicht als erste Wahl, wenn Sie strenge Anforderungen an die Beziehung stellen (über Ihren Datensatz hinweg).
Cassandra ist standardmäßig ein AP-System (von CAP). Es unterstützt jedoch eine einstellbare Konsistenz, was bedeutet, dass es auch als CP konfiguriert werden kann. Ignorieren Sie es also nicht, nur weil Sie irgendwo gelesen haben, dass es sich um einen AP handelt und Sie nach CP-Systemen suchen. Cassandra wird genauer als "einstellbar konsistent" bezeichnet, was bedeutet, dass Sie auf einfache Weise den gewünschten Konsistenzgrad im Gleichgewicht mit dem Verfügbarkeitsgrad bestimmen können.
Verwenden Sie Cassandra nicht, wenn Ihre Skalierung nicht groß ist oder wenn Sie mit einer nicht verteilten Datenbank umgehen können.
Überlegen Sie besser, wenn Ihr Team der Meinung ist, dass alle Ihre Probleme gelöst werden, wenn Sie verteilte DBs wie Cassandra verwenden. Der Einstieg in diese DBs ist sehr einfach, da sie mit vielen Standardeinstellungen verbunden sind. Die Optimierung und Beherrschung zur Lösung eines bestimmten Problems würde jedoch einen guten (wenn nicht sogar großen) technischen Aufwand erfordern.
Cassandra ist spaltenorientiert, aber gleichzeitig hat jede Zeile einen eindeutigen Schlüssel. Es kann daher hilfreich sein, sich das als indizierten, zeilenorientierten Speicher vorzustellen. Sie können es sogar als Dokumentenspeicher verwenden.
Cassandra zwingt Sie nicht, die Felder vorher zu definieren. Wenn Sie sich also in einem Startmodus befinden oder Ihre Funktionen sich weiterentwickeln (wie in Agile), ist Cassandra davon überzeugt. Denken Sie also besser zuerst an Fragen und dann an Daten, um sie zu beantworten.
Cassandra ist für einen wirklich hohen Durchsatz beim Schreiben optimiert. Wenn Ihr Anwendungsfall leselastig ist (wie der Cache), ist Cassandra möglicherweise nicht die ideale Wahl.
Eine andere Situation, die die Auswahl erleichtert, ist, wenn Sie Aggregatfunktionen wie Summe, Min, Max usw. und komplexe Abfragen (wie im oben genannten Finanzsystem) verwenden möchten, dann ist eine relationale Datenbank wahrscheinlich bequemer als eine NOSQL-Datenbank, da beide sind In einer NOSQL-Datenbank ist dies nur möglich, wenn Sie wirklich viele invertierte Indizes verwenden. Wenn Sie nosql verwenden, müssten Sie die Aggregatfunktionen im Code ausführen oder sie separat in einer eigenen Spaltenfamilie speichern. Dies macht alles jedoch recht komplex und verringert die Leistung, die Sie durch die Verwendung von nosql erzielt haben.
Wenn Sie eine vollständig konsistente Datenbank mit SQL-Semantik benötigen, ist Cassandra NICHT die Lösung für Sie. Cassandra unterstützt die Suche nach Schlüsselwerten. SQL-Abfragen werden nicht unterstützt. Daten in Cassandra sind "schließlich konsistent". Gleichzeitige Suchvorgänge von Daten können inkonsistent sein, aber letztendlich sind Suchvorgänge konsistent.
Wenn Sie eine strenge Semantik benötigen und Unterstützung für SQL-Abfragen benötigen, wählen Sie eine andere Lösung wie MySQL, PostGres oder kombinieren Sie die Verwendung von Cassandra mit Solr.
Cassandra ist eine gute Wahl, wenn:
Sie benötigen die ACID-Eigenschaften nicht aus Ihrer Datenbank.
Es würde eine massive und große Anzahl von Schreibvorgängen in der DB geben.
Die Integration in Big Data, Hadoop, Hive und Spark ist erforderlich.
Es besteht Bedarf an Echtzeit-Datenanalysen und Berichtsgenerierungen.
Es ist ein beeindruckender fehlertoleranter Mechanismus erforderlich.
Es besteht ein Erfordernis eines homogenen Systems.
Für die Abstimmung sind zahlreiche Anpassungen erforderlich.
Mongodb hat sehr leistungsfähige Aggregatfunktionen und ein ausdrucksstarkes Aggregat-Framework. Es verfügt über viele Funktionen, die Entwickler aus der relationalen Datenbankwelt gewohnt sind. Die Dokumentdaten- / Speicherstruktur ermöglicht komplexere Datenmodelle als beispielsweise Cassandra.
All dies ist natürlich mit Kompromissen verbunden. Wenn Sie also Ihre Datenbank (NoSQL, NewSQL oder RDBMS) auswählen, prüfen Sie, welches Problem Sie lösen möchten und welche Skalierbarkeitsanforderungen Sie haben. Keine Datenbank macht alles.
Apache Cassandra ist eine verteilte Datenbank für die Verwaltung großer Mengen strukturierter Daten auf vielen Commodity-Servern. Gleichzeitig bietet sie hochverfügbaren Service und keinen einzigen Fehlerpunkt.
Die Archichecture basiert ausschließlich auf dem Cap-Theorem, das Verfügbarkeit und Partitionstoleranz ist, und interessanterweise konsequent konsistent.
Verwenden Sie es nicht, wenn Sie keine Datenmengen über Cluster-Racks hinweg speichern. Verwenden Sie es nicht, wenn Sie keine Zeitreihendaten speichern. Verwenden Sie es nicht, wenn Sie Ihre Server nicht patinieren. Verwenden Sie es nicht, wenn Sie eine starke Konsistenz benötigen.