2016-06-01 5 views
1

Ich versuche herauszufinden, welche Vorteile ein zusammengesetzter Partitionsschlüssel bieten kann. Sehen Sie sich das Beispiel der berühmten Wetterstation an.Wie arbeitet Composite Column PartitionKey in Cassandra?

TABLE Temperatur CREATE ( Zustand Text, city Text, EVENT_TIME Zeitstempel, Temperatur Text, PRIMARY KEY ((Land, Stadt), EVENT_TIME) );

Jetzt befrage ich die meiste Zeit in einem einzigen Zustand auf einer Reihe von Städten und einer Reihe von Daten. So ist die Abfrage wie

SELECT * FROM temperature WHERE state = 'NY' AND city IN ('mahattan', 'brooklyn','queens') AND event_time > '2016-01-01'.

Angenommen, ich habe einen großen Datensatz, in dem Sinne, dass ich ein paar Zustände (# < 1000) habe, aber für jeden Zustand habe ich viele viele Städte (#> 100M). Ich repliziere die Daten und verteile sie auf verschiedene Knoten.

Frage: können vergleichen Sie die Unterschiede mit

PRIMARY KEY (**(state, city)**,event_time) 

PRIMARY KEY (**(city, state)**,event_time) 

PRIMARY KEY (state, city,event_time) 

PRIMARY KEY (zipcode, event_time) 

Thank you!

Antwort

1

Composite-Key

PRIMARY KEY (**(state, city)**,event_time) 
PRIMARY KEY (**(city, state)**,event_time) 

sind funktionell gleichwertig. Der zusammengesetzte Partitionsschlüssel wird die kombinierten Werte von Stadt und Staat sein. Sie können eine Partition ohne beide Teile nicht vollständig angeben. Innerhalb der Partition werden die Zellen nach event_time geordnet. Sie werden #State * #City Partitionen

[city, state] -> [event_time_0, event_time_1, event_time_2, event_time_3, ...] 

Sie haben Abfragen der Lage sein, zu schreiben wie

SELECT * FROM TABLE WHERE CITY = X AND STATE = Y AND event_time (><=) SomeValue 

Compound Keys

PRIMARY KEY (state, city,event_time) 

Eine Partition für jeden Zustand hergestellt wird. Dies ist wahrscheinlich schlecht, da es in der Größenordnung von 100x Staat/Provinzen liegt, was bedeutet, dass Sie nur eine sehr kleine Anzahl von Partitionen haben werden. Die Daten werden innerhalb der Partition nach city und event_time angeordnet.

Abfragen müssen die Stadt einschränken, wenn sie auch die Ereigniszeit einschränken.

PRIMARY KEY (zipcode, event_time) 

Sie haben bis zu 10k Partitionen, jede hat eine einzelne Zelle für jede Ereigniszeit.

+0

PRIMÄRSCHLÜSSEL ((state, city), event_time) vs PRIMARY KEY (Postleitzahl, event_time) Welches ist besser? Nehmen wir an, die Postleitzahl ist für jeden Stadtstaat einzigartig. Sag, wenn ich 2 Zustände habe und jeder 3 Städte hat, dann habe ich insgesamt 6 Postleitzahlen. Soll ich also höhere Partitionen bevorzugen? – acai

+0

Sie wollen fast immer mehr Partitionen und ich stelle mir vor, dass Postleitzahlen eher eine äquivalente Menge an Ereignissen haben als Städte (da die Postleitzahlen auf Pop basierend normalisiert werden sollen) – RussS

Verwandte Themen