paint-brush
Cassandra: Hochskalierbare Datenbank sofort einsatzbereitvon@therealone
770 Lesungen
770 Lesungen

Cassandra: Hochskalierbare Datenbank sofort einsatzbereit

von Denis Larionov9m2023/12/27
Read on Terminal Reader

Zu lang; Lesen

Dieser Artikel bietet einen Überblick über Cassandra, eine hoch skalierbare und verteilte Datenbank mit großen Spalten. Cassandra ist darauf ausgelegt, Verfügbarkeit und Partitionstoleranz zu priorisieren und eignet sich daher für Anwendungen, bei denen Konsistenz keine entscheidende Anforderung ist. Es unterstützt einen hohen Durchsatz und schnellere Schreibvorgänge.
featured image - Cassandra: Hochskalierbare Datenbank sofort einsatzbereit
Denis Larionov HackerNoon profile picture

Cassandra ist eine verteilte, dezentrale, skalierbare und hochverfügbare Breitspaltendatenbank.

Im Sinne des CAP-Theorems steht Cassandra für AP (Verfügbarkeit und Partitionstoleranz).


Cassandra-Venn-Diagramm


Dies bedeutet, dass Cassandra bevorzugt, dass alle Clients Daten finden können, auch wenn nicht alle Knoten verfügbar sind, und wie erwartet funktionieren, wenn ein teilweiser Netzwerkausfall auftritt. Dies bedeutet jedoch auch, dass die Konsistenz der Daten zugunsten der Verfügbarkeit und Partitionstoleranz beeinträchtigt werden kann – Benutzer sehen die Daten, sie können jedoch für eine Weile veraltet sein.


Cassandra ist darauf ausgelegt, einen hohen Durchsatz und schnellere Schreibvorgänge zu erreichen.


Und gerade der Verzicht auf Konsistenz ermöglicht Cassandra eine hohe Verfügbarkeit.

Standardmäßig ist Cassandra so konzipiert, dass es letztendlich konsistent ist, was bedeutet, dass es möglicherweise keine starke Konsistenz bietet. Dadurch eignet sich Cassandra für Anwendungen, bei denen Konsistenz keine entscheidende Anforderung ist. Es ist jedoch möglich, Cassandra so zu konfigurieren, dass eine starke Konsistenz gewährleistet ist, obwohl dies Auswirkungen auf die Leistung haben kann.

Da Cassandra eine NoSQL-Datenbank ist, unterstützt sie keine Tabellenverknüpfungen, Fremdschlüssel oder die Möglichkeit, beim Abfragen andere Spalten als den Primärschlüssel in der WHERE-Klausel hinzuzufügen. Diese Einschränkungen sollten berücksichtigt werden, bevor Sie sich für die Verwendung von Cassandra entscheiden.

Cassandra-Bausteine

  • Spalte : Eine Spalte stellt ein Schlüssel-Wert-Paar dar und dient als grundlegende Einheit der Datenstruktur.
  • Zeile : fungiert als Container für Spalten, auf die der Primärschlüssel verweist.
  • Schlüsselraum : dient als Container für Tabellen, die sich über einen oder mehrere Cassandra-Knoten erstrecken.
  • Cluster : ein Container mit Schlüsselräumen innerhalb von Cassandra.
  • Knoten : bezieht sich auf ein Computersystem, das eine Instanz von Cassandra ausführt. Ein Knoten kann ein physischer Host, eine Maschineninstanz in der Cloud oder sogar ein Docker-Container sein.

Wie Cassandra Daten speichert

Cassandra speichert die Daten als Spaltenfamilie. Es dient als Container für Spalten, auf die ein Primärschlüssel verweist.

Ja, habe ich!


Eine Zeile einer Spaltenfamilie umfasst mehrere Spalten mit Schlüssel und Wert, und der Zeilenschlüssel dient als Primärschlüssel:

Spaltenfamilienzeile


Eine Spaltenfamilie kann für jeden Zeilenschlüssel einen anderen Satz von Spalten speichern:

Speichern verschiedener Spaltensätze

Cassandra speichert keine Spalten mit Nullwerten, wodurch erheblich Speicherplatz gespart wird

Was ist der Primärschlüssel in Cassandra?

Der Primärschlüssel identifiziert jede Zeile einer Tabelle eindeutig. In Cassandra besteht der Primärschlüssel aus zwei Teilen:

Primärschlüssel in Cassandra


In Cassandra bestimmt der Partitionsschlüssel, welcher Knoten die Daten speichert, während der Clustering-Schlüssel bestimmt, wie die Daten innerhalb eines Knotens gespeichert werden. Betrachten Sie zum Beispiel eine Tabelle mit a

PRIMARY KEY (city_id, event_id) . Dieser Primärschlüssel besteht aus zwei Teilen, dargestellt durch die beiden Spalten:


1. city_id dient als Partitionsschlüssel, was bedeutet, dass die Daten basierend auf dem city_id Feld partitioniert werden, was dazu führt, dass alle Zeilen mit derselben city_id auf demselben Knoten gespeichert werden.

2. event_id fungiert als Clustering-Schlüssel. Innerhalb jedes Knotens werden die Daten basierend auf der Spalte event_id in sortierter Reihenfolge organisiert und gespeichert.

Clustering-Schlüssel bestimmen die Speicheranordnung von Daten innerhalb eines Knotens. Es ist möglich, mehrere Clustering-Schlüssel zu haben, und alle nach dem Partitionsschlüssel aufgeführten Spalten werden als Clustering-Spalten bezeichnet. Clustering-Spalten definieren die Reihenfolge, in der Daten auf einem Knoten organisiert sind.

Clustering-Schlüssel

Jede Zeile mit dem Partitionsschlüssel = „Paris“ wird auf demselben Knoten gespeichert, sortiert nach dem Wert der Spalte „event_id“.

Datenpartitionierung sofort einsatzbereit

Cassandra bietet Datenpartitionierung basierend auf konsistentem Hashing , um die Latenz bei Lese-/Schreibvorgängen zu reduzieren und den Durchsatz des Systems zu erhöhen, wenn die in der Datenbank gespeicherte Datenmenge groß wird.


Der Partitionierer in Cassandra ist dafür verantwortlich, zu entscheiden, wie Daten über den Consistent Hash-Ring verteilt werden. Wenn Daten in einen Cassandra-Cluster eingefügt werden, wendet der Partitionierer einen Hashing-Algorithmus auf den Partitionsschlüssel an. Das Ergebnis dieses Hashing-Algorithmus bestimmt den Bereich, in den die Daten fallen, und bestimmt den Knoten, auf dem die Daten gespeichert werden.

Partitionierer in Cassandra


Koordinatorknoten

In Cassandra kennt jeder Knoten die Token-Zuweisungen anderer Knoten über das Gossip-Protokoll , sodass jeder Knoten Anforderungen für den Bereich jedes anderen Knotens bearbeiten kann. Daher kann ein Client eine Verbindung zu jedem Knoten herstellen, um Lese- oder Schreibabfragen zu initiieren.


Der Knoten, der die Anfrage empfängt, wird als Koordinator bezeichnet und kann ein beliebiger Knoten im Cluster sein. Wenn ein Schlüssel nicht zum Bereich des Koordinators gehört, wird die Anfrage an die für diesen Bereich verantwortlichen Replikate weitergeleitet.

Koordinatorknoten

Reproduzieren

Cassandra repliziert Daten über mehrere Knoten hinweg, um eine hohe Verfügbarkeit sicherzustellen. Jeder Knoten in Cassandra dient als Replikat für einen bestimmten Datenbereich. Durch die Verteilung mehrerer Kopien der Daten auf verschiedene Replikate ermöglicht Cassandra anderen Replikaten, Abfragen für diesen Datenbereich zu verarbeiten, falls ein Knoten nicht verfügbar ist. Zwei Einstellungen wirken sich auf den Replikationsprozess aus:

Reproduzieren


Der Replikationsfaktor bestimmt, wie viele Knoten Kopien derselben Daten speichern. In einem Cluster mit einem Replikationsfaktor von 3 wird jede Zeile auf drei verschiedenen Knoten gespeichert.

Jeder Schlüsselraum in Cassandra kann einen anderen Replikationsfaktor haben.

In Cassandra wird das erste Replikat basierend auf dem Hash des Partitionsschlüssels dem Knoten zugewiesen, der den Bereich besitzt. Die verbleibenden Replikate werden dann im Uhrzeigersinn auf aufeinanderfolgenden Knoten platziert. Cassandra verwendet zwei Replikationsstrategien, um zu bestimmen, welche Knoten für die Replikate verantwortlich sind:

Einfache Replikationsstrategie

Bei dieser Strategie wird das erste Replikat auf einem vom Partitionierer bestimmten Knoten platziert und die nachfolgenden Replikate werden im Uhrzeigersinn auf den nachfolgenden Knoten platziert.

Einfache Replikationsstrategie

Diese Replikationsstrategie ist nur für einen einzelnen Rechenzentrumscluster anwendbar.

Strategie für die Netzwerktopologie

Um die Widerstandsfähigkeit gegen einen vollständigen Datenverlust sicherzustellen, werden zusätzliche Replikate innerhalb desselben Rechenzentrums platziert, indem sie sich im Uhrzeigersinn entlang des Rings bewegen, bis sie den ersten Knoten in einem anderen Rechenzentrum erreichen. Diese Anordnung trägt dazu bei, die Auswirkungen gleichzeitiger Ausfälle zu mildern, die typischerweise innerhalb desselben Rechenzentrums aufgrund von Strom-, Kühlungs- oder Netzwerkproblemen auftreten.

Strategie für die Netzwerktopologie

Wenn es um Konfigurationen mit mehreren Rechenzentren geht, sollten Sie die Strategie der Netzwerktopologie berücksichtigen. Dieser Ansatz ermöglicht die Spezifikation unterschiedlicher Replikationsfaktoren für jedes Rechenzentrum und ermöglicht so die Kontrolle über die Anzahl der Replikate, die an jedem spezifischen Standort platziert werden sollen.

Wann sollte Cassandra verwendet werden?

Cassandra zeichnet sich durch Anwendungen aus, die den Umgang mit großen Datenmengen erfordern und bei denen die Datenverfügbarkeit Vorrang vor der Konsistenz hat. Es ist gut geeignet für :


1. Anwendungen für das Internet der Dinge (IoT) : Cassandra ist eine ideale Wahl für IoT-Umgebungen, da es riesige Datenmengen verarbeiten kann, die von Geräten und Sensoren generiert werden. Seine verteilte Architektur ermöglicht die Verwaltung geografisch verteilter, großer Datenmengen.


2. Zeitreihendaten : Anwendungen, die sich mit Zeitreihendaten befassen, wie z. B. Metriken, Überwachungssysteme und Telemetriedaten, profitieren von den effizienten Schreibvorgängen und der horizontalen Skalierbarkeit von Cassandra. Diese Funktionen sind für die Speicherung und Verwaltung großer Mengen zeitgestempelter Daten von entscheidender Bedeutung.


3. Web- und Mobilanwendungen : Cassandra bietet einen hohen Durchsatz und Datenzugriff mit geringer Latenz und eignet sich daher für Web- und Mobilplattformen mit großen Benutzerbasen, die erhebliche Datenmengen erzeugen. Dazu gehören Social-Media-Plattformen, Gaming-Apps und E-Commerce-Seiten.


4. Echtzeit-Big-Data-Analyse : Cassandra unterstützt die Echtzeitverarbeitung von Big Data und ist damit eine wertvolle Wahl für Anwendungen, die sofortige Erkenntnisse aus großen Datensätzen erfordern. Beispiele hierfür sind Empfehlungs-Engines und Betrugserkennungssysteme.


5. Verteilte Data Warehouses : Unternehmen mit großen, verteilten Datensätzen können Cassandra als Data Warehouse-Lösung nutzen. Seine Fähigkeit, Daten über mehrere Rechenzentren hinweg zu replizieren, sorgt für hohe Verfügbarkeit und Notfallwiederherstellung.


6. Messaging-Systeme : Cassandras hoher Schreib- und Lesedurchsatz macht es gut geeignet für Messaging-Systeme, die große Datenmengen verarbeiten, wie z. B. Ereignisprotokollierung, Audit-Trails oder Nachrichtenwarteschlangen.


7. Personalisierungs- und Content-Management-Systeme : Anwendungen, die eine personalisierte Inhaltsbereitstellung in großem Maßstab erfordern, wie z. B. Content-Management-Systeme, profitieren von der Geschwindigkeit und Skalierbarkeit von Cassandra bei der gleichzeitigen Bereitstellung maßgeschneiderter Inhalte für eine große Anzahl von Benutzern.


8. Geografisch verteilte Anwendungen : Die Unterstützung mehrerer Rechenzentren macht Cassandra zu einer hervorragenden Wahl für Anwendungen, die geografisch verteilte Daten erfordern. Es gewährleistet einen Datenzugriff mit geringer Latenz über verschiedene Regionen hinweg und bietet eine hohe Ausfallsicherheit.

Wann Sie Cassandra nicht verwenden sollten

Obwohl Apache Cassandra leistungsstark und skalierbar ist, ist es möglicherweise nicht für jede Anwendung oder jeden Anwendungsfall geeignet. Es eignet sich weniger für transaktionsintensive Anwendungen, komplexe Abfragen und Szenarien, die eine starke Konsistenz oder schnelle Schemaänderungen erfordern. In solchen Fällen sind herkömmliche relationale Datenbankverwaltungssysteme (RDBMS) oder andere NoSQL-Lösungen möglicherweise besser geeignet. Hier sind mehrere Szenarien, in denen Cassandra möglicherweise nicht die optimale Wahl ist :


  1. Kleine Projekte : Die Komplexität und der Ressourcenbedarf von Cassandra können für kleine Projekte oder Anwendungen mit begrenzten Datensätzen übermäßig hoch sein. Einfachere Datenbanklösungen bieten möglicherweise eine kostengünstigere und besser verwaltbare Alternative.


  2. Transaktionssysteme, die ACID-Eigenschaften erfordern : Cassandra unterstützt ACID-Eigenschaften (Atomizität, Konsistenz, Isolation, Haltbarkeit) nicht vollständig. Wenn Ihre Anwendung komplexe Transaktionen erfordert, die typischerweise in Bank- oder Finanzsystemen vorkommen, ist ein herkömmliches RDBMS möglicherweise besser geeignet.


  3. Verknüpfen Sie schwere Abfragen und Aggregationen : Wenn Ihre Anwendung stark auf Verknüpfungen, Unterabfragen oder komplexe Aggregationen angewiesen ist, ist Cassandra möglicherweise nicht die beste Wahl. Es ist für schnelle Schreib- und Lesevorgänge konzipiert, jedoch nicht für die Verarbeitung komplexer Abfragen.


  4. Daten mit starken Konsistenzanforderungen : Cassandra bietet letztendliche Konsistenz, die möglicherweise nicht für Anwendungsfälle geeignet ist, die eine starke Konsistenz für jeden Lese- und Schreibvorgang erfordern.


  5. Lese- und Schreibvorgänge mit geringer Latenz in einem einzelnen Cluster : Während Cassandra in verteilten Umgebungen mit mehreren Knoten eine gute Leistung erbringt, ist es möglicherweise nicht die optimale Wahl für Bereitstellungen mit einem Knoten oder kleinen Clustern, die Lese- und Schreibvorgänge mit geringer Latenz erfordern.


  6. Blob-Speicher : Cassandra ist nicht für die Speicherung großer Binärobjekte (Blobs) wie Bilder oder Videos optimiert. Andere Speicherlösungen eignen sich besser für die effiziente Handhabung großer Blobs.


  7. Anwendungen, die Ad-hoc-Abfragen erfordern : Die Abfragefunktionen von Cassandra sind im Vergleich zu vollwertigen SQL-Datenbanken begrenzt. Es eignet sich nicht gut für Anwendungen, die stark auf Ad-hoc-Abfragen und -Berichten angewiesen sind.

    In Cassandra ist das Design von Tabellen eng mit der Art und Weise verbunden, wie auf Daten zugegriffen wird, wobei der Schwerpunkt auf den Abfragemustern liegt und nicht nur auf die Beziehungen zwischen Datenentitäten. Dies unterscheidet sich vom Ansatz in RDBMS, wo der Schemaentwurf auf Normalisierungsprinzipien basiert.


  8. Schnelle Schemaentwicklung : Wenn Ihre Anwendung häufige Änderungen am Datenbankschema erfordert, ist die Schemaverwaltung von Cassandra im Vergleich zu herkömmlichen RDBMS-Systemen oder anderen NoSQL-Lösungen möglicherweise weniger flexibel.


  9. Data Warehouse-Anwendungen, die komplexe Abfragen, Verknüpfungen und historische Datenanalysen umfassen : Während Cassandra sich gut für schreibintensive Arbeitslasten und Echtzeit-Datenzugriff eignet, ist es möglicherweise nicht die beste Wahl für Data Warehousing-Szenarien, die komplexe Abfragen erfordern. Joins und historische Datenanalyse.

Zusammenfassung

Dieser Artikel bietet einen Überblick über Cassandra, eine hoch skalierbare und verteilte Datenbank mit großen Spalten. Cassandra ist darauf ausgelegt, Verfügbarkeit und Partitionstoleranz zu priorisieren und eignet sich daher für Anwendungen, bei denen Konsistenz keine entscheidende Anforderung ist. Es unterstützt einen hohen Durchsatz und schnellere Schreibvorgänge.


Zu den Bausteinen von Cassandra gehören Spalten, Zeilen, Schlüsselräume, Cluster und Knoten. Spalten stellen Schlüssel-Wert-Paare dar, Zeilen fungieren als Container für Spalten, auf die der Primärschlüssel verweist, Schlüsselräume dienen als Container für Tabellen, die sich über mehrere Knoten erstrecken, Cluster enthalten Schlüsselräume und Knoten verweisen auf Computersysteme, auf denen Cassandra-Instanzen ausgeführt werden.


Cassandra speichert Daten in Spaltenfamilien, die Container für Spalten sind, auf die ein Primärschlüssel verweist. Die Datenpartitionierung wird durch konsistentes Hashing erreicht, was eine geringere Latenz und einen höheren Durchsatz ermöglicht. Der Partitionierer verteilt Daten über den Consistent-Hash-Ring und ein Koordinatorknoten verarbeitet Lese- und Schreibabfragen.


Cassandra bietet Replikation für hohe Verfügbarkeit. Replikate von Daten werden auf mehreren Knoten gespeichert, um sicherzustellen, dass Abfragen von Replikaten bearbeitet werden können, wenn ein Knoten nicht verfügbar ist. Replikationsfaktoren und -strategien bestimmen die Anzahl der Replikate und die dafür verantwortlichen Knoten.


Cassandra bietet zwar Vorteile wie Skalierbarkeit und hohe Verfügbarkeit, weist jedoch Einschränkungen auf. Tabellenverknüpfungen, Fremdschlüssel und die Möglichkeit, während der Abfrage andere Spalten als den Primärschlüssel in der WHERE-Klausel hinzuzufügen, werden nicht unterstützt.


Insgesamt ist Cassandra eine leistungsstarke Datenbanklösung für hoch skalierbare Anwendungen, insbesondere für solche, bei denen Verfügbarkeit und Partitionstoleranz Vorrang vor starker Konsistenz haben.

Es gibt mehrere interessante Aspekte von Cassandra, die ich in meinem nächsten Artikel behandeln werde. Abonnieren Sie mich, damit Sie es nicht verpassen!

Prost!