2017-11-20 1 views
1

Ich habe gerade angefangen, an Cassandra zu arbeiten. Ich bin etwas verwirrt mit dem Konzept der sekundären Schlüssel.Sekundärindex für Tabelle in Cassandra erstellen

Aus der Definition, die ich verstanden habe, ist die Indizierung auf dem Nicht-Schlüssel-Attribut einer Tabelle, die nicht sortiert ist, Sekundärindex. So

Ich habe diese Tabelle

CREATE TABLE IF NOT EXISTS userschema.user (id int,name text, address text, company text, PRIMARY KEY (id, name)) 

Wenn ich also Index zu erstellen, wie diese

CREATE INDEX IF NOT EXISTS user_name_index ON userschema.user (name) 

dieser sollte Sekundärindex sein.

Aber meine Anforderung ist, Index mit Spalten Name, ID, Firma zu erstellen.

Wie kann ich einen sekundären Index in Cassandra erstellen?

Ich habe this Link, der etwas von diesem kurzen definiert, aber wie kommen diese sekundären Indizes sind sie nicht nur Tabelle?

Diese obige Benutzertabelle ist nur das Beispiel, nicht das tatsächliche.

Ich bin mit Cassandra 3.0.9

+1

Welche Fragen werden Sie an dieser Tabelle laufen gehen werden? Die Abfragen helfen normalerweise, das Datenmodell zu bestimmen. – mikea

+0

ein bisschen wie ein PSA: Sie wollen hier wahrscheinlich sekundäre Indizes vermeiden. Sie sind für sehr spezifische Anwendungsfälle (Kardinalität ~ = Anzahl von Knoten) gemacht, nichts, wie Indizes in vielen relationalen dbs Menschen gewohnt sind. Erstellen Sie stattdessen eine neue Tabelle, und schreiben Sie in beide. –

Antwort

1

id und name sind bereits Teil des Primärschlüssels.

So werden folgende Abfragen

SELECT * FROM table WHERE id=1 
SELECT * FROM table WHERE id=1 and name='some value' 
SELECT * FROM table WHERE name='some value' ALLOW FILTERING (This is inefficeint) 

Sie arbeiten Sekundärindex auf Unternehmen Spalte

CREATE INDEX IF NOT EXISTS company_index ON userschema.user (company) 

nun einmal definiert Sekundärindex erstellen kann, kann es zusammen mit Primärschlüssel in where-Klausel verwendet werden.

SELECT * FROM table WHERE id=1 and name='some value' and company='some value' 

Obwohl SELECT * FROM table WHERE company='some value' ALLOW FILTERING funktioniert, wird es sehr ineffizient sein.

Bevor sekundären Index erstellen haben Blick auf When to use secondary index in cassandra

0

Der Link, den Sie in erster Linie konzentriert sich auf die materialisierte Ansichten bezeichnet haben, in denen wir virtuelle Tabellen erstellen, die Abfragen mit Nicht-Primärschlüssel auszuführen. Außerdem scheint es, dass Sie Sekundärschlüssel für einen Primärschlüssel erstellen, den Sie bereits bei der Erstellung der Tabelle definiert haben. Denken Sie immer daran, dass der Sekundärindex ein Nicht-Primärschlüssel sein sollte.

eine klare Vorstellung haben, über das Sekundär Indexes- diesen https://docs.datastax.com/en/cql/3.3/cql/cql_using/useSecondaryIndex.html Jetzt

Siehe, Vor- und Nachteile der alternativen Methoden für den Sekundärindex

1.Materialized Ansichten:

Es wird erstellen neue virtuelle Tabellen und Sie sollten die Abfragen in einer virtuellen Tabelle mit den alten Primärschlüsseln in alten und ursprünglichen Tabellen und neuen virtuellen Primärschlüsseln in der neuen materialisierten Tabelle ausführen. Alle Änderungen in der Datenmodifikation in der ursprünglichen alten Tabelle werden in der materialisierten Tabelle widergespiegelt.Wenn Sie die materialisierte Tabelle löschen, werden die Daten jedoch als Tombstones erstellt, deren gcc_graceseconds standardmäßig auf 864000 (10 Tage) festgelegt ist. Das Löschen der materialisierten Tabelle hat keine Auswirkungen auf die ursprüngliche Tabelle.

2.Allow FILTERING:

Es ist sehr ineffizient und nicht bei allen Filtern verwenden beraten zu lassen, da die Latenzen hoch sein wird, und die Leistung wird verschlechtert.

Wenn Sie viel mehr Informationen wollen, lesen Sie diesen Link zu How do secondary indexes work in Cassandra?

Korrigieren Sie mich, wenn ich falsch bin

Verwandte Themen