Was ist der Sinn von Spaltenfamilien?

9

Ich habe gesehen, dass NoSQL-Datenbanksysteme wie RocksDB eine Funktion namens Spaltenfamilien bieten . Ich glaube, ich verstehe, worauf sich das Konzept bezieht, aber was sind die tatsächlichen (praktischen) Vorteile ihrer Verwendung? Ich gehe davon aus, dass sie in einigen Fällen die Suchleistung verbessern können, oder zumindest die räumliche Lokalität von Schlüsselwerten. Soweit ich weiß, scheint dies jedoch keinen Einfluss auf die tatsächliche Semantik des Datenbankzugriffs zu haben. Ist das richtig? Fehlt mir etwas?

Noldorin
quelle

Antworten:

3

Ich habe gerade einige interessante Informationen aus den RocksDB- FAQ entdeckt . (RocksDB ist ein KV-Store.)

Hier sind einige relevante Auszüge.

F: Wofür werden Spaltenfamilien verwendet?

A: Die häufigsten Gründe für die Verwendung von Spaltenfamilien: (1) Verwenden Sie unterschiedliche Komprimierungseinstellungen, Komparatoren, Komprimierungstypen, Zusammenführungsoperatoren oder Komprimierungsfilter in verschiedenen Teilen von Daten. (2) eine Spaltenfamilie löschen, um ihre Daten zu löschen; (3) eine Spaltenfamilie zum Speichern von Metadaten und eine andere zum Speichern der Daten.

F: Was ist der Unterschied zwischen dem Speichern von Daten in mehreren Spaltenfamilien und in mehreren Rocksdb-Datenbanken?

A: Die Hauptunterschiede sind Backup, atomare Schreibvorgänge und die Leistung von Schreibvorgängen. Der Vorteil der Verwendung mehrerer Datenbanken: Die Datenbank ist die Einheit der Sicherung oder des Prüfpunkts. Es ist einfacher, eine Datenbank auf einen anderen Host als eine Spaltenfamilie zu kopieren. Vorteile der Verwendung mehrerer Spaltenfamilien: (1) Schreibstapel sind über mehrere Spaltenfamilien in einer Datenbank hinweg atomar. Sie können dies nicht mit mehreren RocksDB-Datenbanken erreichen. (2) Wenn Sie Synchronisierungsschreibvorgänge an WAL ausgeben, können zu viele Datenbanken die Leistung beeinträchtigen.

F: Ich habe verschiedene Schlüsselbereiche. Soll ich sie durch Präfixe trennen oder verschiedene Spaltenfamilien verwenden?

A: Wenn jeder Schlüsselbereich ausreichend groß ist, empfiehlt es sich, ihn in verschiedene Spaltenfamilien einzuteilen. Wenn es klein sein kann, sollten Sie in Betracht ziehen, mehrere Schlüsselbereiche in eine Spaltenfamilie zu packen, um die Probleme zu vermeiden, zu viele Spaltenfamilien zu verwalten.

Noldorin
quelle
2

Ich weiß, dass Sie nicht nach einer Parallele zu SQL suchen, aber dieser Artikel erklärt einfach den Zweck und den praktischen Nutzen von Spaltenfamilien.

Aus dem Verständnis des Cassandra-Datenmodells aus einer SQL-Perspektive in RubyScale:

Was ist dann eine Säulenfamilie? Nur ein Tabellenpräfix? Eine Spaltenfamilie verfügt über eine Reihe von Einstellungen, die das Verhalten ändern. Es gibt Cache-Einstellungen für die Schlüssel (die UUIDs in diesem Beispiel), Cache-Einstellungen für die gesamten Zeilen (die gesamte Tabelle in diesem Beispiel) und vor allem das Sortieren. In Cassandra gibt es kein OFFSET, nur LIMIT und das Äquivalent von ZWISCHEN . In diesem Beispiel sind die Spaltennamen nur Zeichenfolgen, sie können jedoch auch Ganzzahlen oder Zeitstempel sein und werden immer in Sortierreihenfolge gespeichert. Eine Spaltenfamilie verfügt möglicherweise über nach Zeitstempeln sortierte Daten, in denen Sie Dinge nach Zeitscheibe abfragen, und eine andere aus Adressbuchdaten, in denen Sie Dinge in alphabetischer Reihenfolge abfragen. Die einzige Sortierung, die Sie nachträglich vornehmen müssen, ist das Umkehren eines bestimmten Slice.

Nelz
quelle
Interessant. Wie Sie sagen, wird die Frage nicht vollständig beantwortet, es wird jedoch ein Hinweis gegeben. Vielen Dank.
Noldorin