Sollte wohl CW sein? Dies ist so ziemlich nur NoSQL vs Relational-Datenbanken, was IMO ziemlich subjektiv ist.
Ed James
3
Ich würde gerne wissen, ob es für Messaging-Systeme geeignet ist. Ich nehme an, wenn Twitter es verwendet, wäre es in Ordnung, aber sie könnten es nicht für alle Twitter verwenden?
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.
Das Problem mit der Antwort ist, dass alle NoSQL-Lösungen zusammengefasst werden. Weitere Informationen finden Sie unter dataconomy.com/sql-vs-nosql-need-know . In der NoSQL-Landschaft sind die grundlegenden Unterteilungen Dokument, Schlüsselwert, Grafik und große Tabelle. Sie haben unterschiedliche Eigenschaften für unterschiedliche Probleme. Eine Lösung, die gut zu Mongo passt, passt möglicherweise nicht gut zu Cassandra.
Yehosef
17
Die einzige Möglichkeit, wie diese Antwort "alle NoSQL-Lösungen zusammenfasst", ist die Kategorie NoSQL. Abgesehen davon weist der Beitrag hervorragend darauf hin, dass jede NoSQL-Datenbank "eine andere Lösung" für verschiedene Probleme bietet. Ich hatte nicht das Gefühl, dass der Autor auch nur leicht angedeutet hat, dass Mongo, Cassandra oder eine andere NoSQL-Datenbank die gleichen Probleme lösen.
Nick Suwyn
NoSQL databaseist keine Sache. NoSQList nur ein Begriff für moderne nicht relationale Datenbanken (siehe Wiki ).
eddyP23
2
Beachten Sie außerdem, dass nicht alle NoSQL-Datenbanken nicht ACID sind. Graph-DBs sind normalerweise ACID.
eddyP23
Cassandra unterstützt den atomaren Betrieb auf Zeilenebene sowie Atomic und Isolation pro Partition mithilfe von Light Weight Transactions. Kann ich Cassandra nicht verwenden, wenn ich ACID auf Zeilenebene haben möchte? Auch für kritische Daten?
TechEnthusiast
52
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 .
Mit Cassandra können Sie anscheinend auch Ihre Konsistenzanforderungen zur Abfragezeit angeben, was für einige Anwendungsfälle ein nützlicher Kompromiss sein kann
Richard Marr
30
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.
Es ist unwahrscheinlich, dass sich das Schema ändert, es passt gut in eine Tabellenstruktur und verlorene / inkonsistente Daten können echte Probleme verursachen.
Tom Clarkson
4
Ich verstehe nicht, warum inkonsistente Daten echte Probleme mit Banken verursachen können. Szenario: Sie haben ein Bankkonto mit 100 USD über dem Limit und zwei Bankkarten. Wenn Sie versuchen, mit den beiden Karten gleichzeitig an zwei verschiedenen Geldautomaten Geld abzuheben, erhalten Sie zweimal 100 US-Dollar und einen Brief mit einer zusätzlichen Gebühr in Ihrem Briefkasten. Die Bank verdient Geld (die zusätzliche Gebühr für das Unterschreiten des Limits) durch die Verwendung inkonsistenter Daten. Es ist zu schwierig, alle Geldautomaten der Welt über eine große relationale Datenbank miteinander zu verbinden. Können Sie ein Beispiel nennen, bei dem inkonsistente Finanzdaten ein Problem darstellen können?
Paco
5
Das Zeug ist alles COBOL und Batch-Verarbeitung und bei weitem nicht so gut gestaltet / stabil, wie Sie vielleicht denken. Geldautomaten stellen keine Verbindung zu einem einheitlichen Datenspeicher her und sind daher kaum ein geeignetes Beispiel. Es ist, als würde man sagen, dass SQL nicht für Web-Apps geeignet ist, weil Sie nicht jedem im Internet direkten Zugriff auf Ihre Datenbank gewähren können. Außerdem habe ich nie etwas über Banken gesagt - denken Sie an Bestellungen auf einer E-Commerce-Website, auf der Sie sich nicht mit einer Organisation befassen müssen, die so konservativ ist, dass SQL als neu und nicht vertrauenswürdig gilt.
Tom Clarkson
6
@Paco: Der erste Geldautomat liest Ihr Guthaben (100 USD) und der zweite Geldautomat macht dasselbe. Beide Geldautomaten ziehen 100 US-Dollar von 100 US-Dollar ab und schreiben den Restbetrag von 0 US-Dollar auf Ihr Konto zurück. Ergebnis: Die Bank verliert 100 Dollar.
Seun Osewa
9
@Paco: Der Punkt ist, dass die normale Bank ohne ordnungsgemäße Transaktionsisolation nicht einmal weiß, dass das Konto überzogen wurde. Sie werden es nicht einmal wissen.
Seun Osewa
14
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.
( Lautstärke , Geschwindigkeit) Schreiben und lesen Sie Tonnen von Informationen, so viele Informationen, dass kein Computer die Schreibvorgänge verarbeiten kann.
(Global) Benötigen Sie diese Schreib- und Lesefunktion weltweit, damit die Schreibvorgänge in einem Teil der Welt in einem anderen Teil der Welt zugänglich sind?
(Zuverlässigkeit) Benötigen Sie diese Datenbank, um ständig in Betrieb zu sein und niemals herunterzufahren, unabhängig davon, welche Cloud, welches Land, ob VM, Container oder Bare Metal?
(Skalierbarkeit) Benötigen Sie diese Datenbank, um problemlos weiter wachsen und linear skalieren zu können?
(Konsistenz) Benötigen Sie TUNABLE-Konsistenz, bei der einige Schreibvorgänge asynchron erfolgen können, während andere zertifiziert werden müssen?
(Geschicklichkeit) Sind Sie bereit, alles zu tun, um diese Technologie und die Datenmodellierung zu erlernen, die mit der Erstellung einer global verteilten Datenbank verbunden ist, die für alle und überall schnell sein kann?
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.
Sie müssen sich nicht mit nur einer Datenbanktechnologie zufrieden geben. Sie können tatsächlich eine Combo verwenden und die für das jeweilige Problem geeignete verwenden.
Pepito Fernandez
3
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.
Zum einen ermöglicht CouchdB die einfache Berechnung von Aggregatfunktionen: wiki.apache.org/couchdb/… . Technisch gesehen ist dies "im Code", aber bei weitem nicht so "komplex" wie bei Cassandra.
user359996
2
Eigentlich stimme ich zu, dass Sie einen Tag brauchen können, um Aggregat in Code zu schreiben, aber Sie können es schreiben, um es auf einem Back-End-Server auszuführen, der nahezu 0 Zyklen der Datenbank verwendet. Bei einer SQL-Datenbank erhalten Sie das Ergebnis, indem Sie eine Zeile schreiben, was 5 Minuten dauern kann. Bei jedem Start wird jedoch die gesamte Datenbank verlangsamt. Es gibt also Vor- und Nachteile in beide Richtungen. Meine Bank schließt beispielsweise alle Website-Zugriffe mitten in der Nacht für etwa 10 bis 15 Minuten. Sie verwenden mit Sicherheit COBOL, aber das ist ein sehr ähnliches Problem.
Alexis Wilke
1
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 Query Language (CQL) ist jedoch SQL ziemlich ähnlich . In der Tat würde ich sagen, dass CQL ein Vorteil von Cassandra gegenüber anderen NoSQL-Optionen für diejenigen ist, die nach einer SQL-ähnlichen Schnittstelle suchen.
Arussell84
1
Cassandra ist technisch nicht konsistent. Mit Cassandra können Sie Konsistenz gegen Verfügbarkeit austauschen. Cassandra gleicht im Grunde den CAP-Satz aus. Sie können schließlich konsistent schreiben und dann konsistent lesen, umgekehrt oder in beiden konsistent, und dies hängt alles von Ihrem Replikationsfaktor in Kombination mit Ihrer Lese- / Schreibstufe ab. Ich habe die Antwort erhalten, dass "wahrscheinlich konsistent" in Anführungszeichen gesetzt wurde, wahrscheinlich aus diesem Grund, aber ich denke, dass eine gewisse Klarheit angebracht ist.
tsturzl
1
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.
Eine vollständige Transaktionsverwaltung über die Tabellen hinweg wird nicht unterstützt.
Sekundärindex wird nicht unterstützt.
Sie müssen sich auf Elastic Search / Solr für den Sekundärindex verlassen und die benutzerdefinierte Synchronisierungskomponente muss geschrieben werden.
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.
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.
quelle
NoSQL database
ist keine Sache.NoSQL
ist nur ein Begriff für moderne nicht relationale Datenbanken (siehe Wiki ).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 .
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Laut DataStax ist Cassandra nicht der beste Anwendungsfall, wenn dies erforderlich ist
1- High-End-Hardwaregeräte. 2- ACID-konform ohne Rollback (Banküberweisung)
quelle
quelle
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.
quelle