Cassandra Sammlungen: Set, List & Map in CQL mit Beispiel

⚡ Intelligente Zusammenfassung

Cassandra Sammlungen speichern mehrere Werte in einer einzigen Spalte mithilfe der Datentypen Set, Liste und Map. Diese Seite erläutert die einzelnen Datentypen, die CQL-Syntax zum Erstellen und Befüllen, das Aktualisieren von Elementen sowie die Größenbeschränkungen, die darüber entscheiden, wann eine Sammlung nicht die richtige Wahl ist.

  • 📦 Drei Typen: Ein Set speichert eindeutige, ungeordnete Werte, eine Liste erhält die Einfügereihenfolge bei und eine Map speichert Schlüssel-Wert-Paare.
  • 🔤 Verhalten festlegen: Die Elemente werden sortiert gespeichert und Duplikate automatisch verworfen.
  • 🔢 Hinweis zur Liste: Die Reihenfolge bleibt erhalten, jedoch müssen beim Voranstellen und Indizieren vor dem Schreiben Lesezugriffe durchgeführt werden.
  • 🗺️ Kartennutzung: Eine Map eignet sich für Attribute, deren Schlüssel bei der Schemaerstellung noch nicht bekannt sind.
  • 📏 Größenbeschränkung: Sammlungen sollten klein gehalten werden; die gesamte Sammlung wird gelesen, selbst wenn nur ein Element benötigt wird.
  • 🧊 Gefrorene Variante: Eine eingefrorene Sammlung wird als ein einziger Wert gespeichert und muss vollständig ersetzt werden.

Cassandra Sammlungen Set-Listen-Karte

Was sind Cassandra Sammlungen?

Cassandra Sammlungen sind eine gute Möglichkeit, Aufgaben zu erledigen. In Sammlungen können mehrere Elemente gespeichert werden. Es gibt Einschränkungen in Cassandra Sammlungen.

  • Eine Sammlungsspalte kann nicht mehr als 64 KB Daten in einem einzelnen Wert speichern.
  • Um den Aufwand für Abfragen der gesamten Sammlung zu vermeiden, sollte diese klein gehalten werden, da die gesamte Sammlung gelesen wird, selbst wenn nur ein einziges Element benötigt wird.
  • Wenn mehr als 64 KB gespeichert werden, können nur die ersten 64 KB abgefragt werden, was zu Datenverlusten führt.
  • Eine nicht eingefrorene Sammlung ist auf etwa 65,535 Elemente begrenzt, und jedes Element wird als eine Einheit gelesen.

Diese Einschränkungen verdeutlichen eine Regel: Sammlungen eignen sich für wenige Attribute, die einer Zeile zugeordnet sind, nicht aber für offene Listen, die mit der Nutzung wachsen. Alles, was stetig wächst, gehört in separate Clusterspalten einer eigenen Tabelle.

Arten von Cassandra Kollektionen

Es gibt hauptsächlich drei Arten von Sammlungen Cassandra unterstützt:

  1. Stelle den
  2. Liste
  3. Karte

Cassandra Set-Kollektion

Ein Set speichert eine Gruppe von Elementen, die bei der Abfrage sortierte Elemente zurückgeben.

Syntax

Hier ist die Syntax der Set-Sammlung, die mehrere E-Mail-Adressen für den Lehrer speichert.

CREATE TABLE University.Teacher (
    id int,
    Name text,
    Email set<text>,
    PRIMARY KEY (id)
);

Beispiel

Hier ist der Schnappschuss, in dem die Tabelle „Lehrer“ mit der Spalte „E-Mail“ als Sammlung erstellt wird.

Beispiel von Cassandra Set-Kollektion

Hier ist der Schnappschuss, in dem Daten in die Sammlung eingefügt werden.

Beispiel von Cassandra Set-Kollektion

INSERT INTO University.Teacher (id, Name, Email)
VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});

Einzelne Elemente können hinzugefügt oder entfernt werden, ohne dass das gesamte Set neu geschrieben werden muss. Dies ist der Hauptvorteil, wenn eine Sammlung nicht eingefroren wird.

UPDATE University.Teacher SET Email = Email + {'new@guru99.com'} WHERE id = 1;
UPDATE University.Teacher SET Email = Email - {'xyz@hotmail.com'} WHERE id = 1;

Cassandra Auflistung der Listen

Wenn die Reihenfolge der Elemente wichtig ist, wird die Liste verwendet.

Beispiel

Hier sehen Sie eine Momentaufnahme, in der die Spalte „Kurse“ vom Typ „Liste“ in die Tabelle „Lehrer“ eingefügt wurde.

Beispiel von Cassandra Auflistung der Listen

ALTER TABLE University.Teacher ADD coursenames list<text>;

Hier ist der Schnappschuss, in dem Daten in die Spalte „Kursnamen“ eingefügt werden.

Beispiel von Cassandra Auflistung der Listen

INSERT INTO University.Teacher (id, Name, Email, coursenames)
VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);

Hier ist der Snapshot, der den aktuellen Datenbankstatus nach dem Einfügen zeigt.

Cassandra Beispiel für eine Listensammlung

Elemente können angehängt oder vorangestellt werden, wobei sowohl das Voranstellen als auch das Aktualisieren per Index eine Operation erfordern. Cassandra Die Liste muss zuerst gelesen werden, was langsamer ist als das Anhängen.

UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2;
UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;

Cassandra Kartensammlung

Die Karte ist ein Sammlungstyp, der zum Speichern von Schlüssel-Wert-Paaren verwendet wird. Wie der Name schon sagt, ordnet es eine Sache einer anderen zu.

Wenn Sie beispielsweise den Namen des Kurses zusammen mit dem Namen des erforderlichen Kurses speichern möchten, kann die Kartensammlung verwendet werden.

Beispiel

Hier ist der Schnappschuss, in dem der Kartentyp für den Kursnamen und den Namen des erforderlichen Kurses erstellt wird.

Beispiel von Cassandra Kartensammlung

CREATE TABLE University.Course (
    id int,
    prereq map<text, text>,
    PRIMARY KEY (id)
);

Hier ist der Schnappschuss, in dem Daten in den Kartensammlungstyp eingefügt werden.

Beispiel von Cassandra Kartensammlung

INSERT INTO University.Course (id, prereq)
VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});

Ein einzelner Eintrag wird gesetzt oder entfernt, ohne den Rest der Karte zu verändern.

UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1;
DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;

Menge vs. Liste vs. Karte: Die Wahl einer Sammlung

Die drei Typen sehen austauschbar aus, unterscheiden sich aber in den Bestellgarantien und den Aktualisierungskosten.

Aspekt Stelle den Liste Karte
Bestellung Sortiert nach Wert Einfügereihenfolge beibehalten Sortiert nach Schlüssel
Duplikate Nicht erlaubt Erlaubt Schlüssel einzigartig
Aktualisierungskosten Günstig, kein Lesen erforderlich Anhängen ist günstig; Voranstellen und Indexaktualisierung erfordern einen Lesevorgang. Günstig pro Schlüssel
am besten für Tags, E-Mail-Adressen, eindeutige Etiketten Geordnete Schritte, bei denen Duplikate sinnvoll sind Benannte Attribute mit unvorhersehbaren Schlüsseln

Verwenden Sie ein Set anstelle einer Liste, es sei denn, die Reihenfolge ist wirklich wichtig, da Indexoperationen auf Listen zu Tombstone-Operationen führen und bei gleichzeitigen Schreibvorgängen unerwartete Ergebnisse liefern können. eingefroren Bei allen drei Speichertypen wird die Sammlung als ein einziger unveränderlicher Wert gespeichert, wodurch die Sammlung zwar als Primärschlüssel erscheinen kann, Aktualisierungen auf Elementebene jedoch entfernt werden.

CREATE TABLE University.Enrolment (
    id int,
    tags frozen<set<text>>,
    PRIMARY KEY (id, tags)
);

Wenn eine Sammlung mehr als einige Dutzend Elemente umfasst, modellieren Sie sie als separate Tabelle, wobei das Element als Clusterspalte verwendet wird, gemäß dem Ansatz in [Referenz einfügen]. Cassandra DatenmodellregelnDas Filtern von Sammlungsinhalten erfordert einen Index, der im Folgenden beschrieben wird. Index erstellen und löschen Tutorial.

Häufig gestellte Fragen

Ja, sobald ein Index existiert. Verwenden Sie CONTAINS für Mengen- und Listenwerte und CONTAINS KEY für Zuordnungsschlüssel, nachdem Sie den entsprechenden VALUES-, KEYS- oder ENTRIES-Index erstellt haben.

Nur wenn die innere Sammlung eingefroren ist, beispielsweise eine Zuordnung von Text zu einer eingefrorenen Textliste. Eine nicht eingefrorene Sammlung kann keine andere Sammlung enthalten.

Das Zuweisen einer neuen Sammlung löscht zunächst alle vorhandenen Elemente und erzeugt so einen Bereichs-Tombstone. Das Hinzufügen und Entfernen einzelner Elemente vermeidet dies und ist daher die bevorzugte Vorgehensweise.

Bei gegebener Anzahl an Elementen und einem erwarteten Aktualisierungsmuster wendet die KI die Regel gut an: Bei begrenzten und kleinen Elementen spricht dies für eine Sammlung, bei unbegrenzten oder häufig abgefragten Elementen für eine Clusterspalte.

Meistens werden jedoch Set-Schleifen häufig mit Listen-Schleifen verwechselt und `frozen` wird weggelassen, wenn es für einen Primärschlüssel erforderlich ist. Führen Sie die generierten Anweisungen zunächst in einem Test-Keyspace aus.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: