2014-12-03 7 views
7

W Cassandry, mogę utworzyć kompozytowy klucza partycji, oddzielną od mojego klucza klastrowego:Zapytania Cassandrę przez częściowego podziału klucza

CREATE TABLE footable (
    column1 text, 
    column2 text, 
    column3 text, 
    column4 text, 
    PRIMARY KEY ((column1, column2)) 
) 

Jak rozumiem, quering kluczem partycja jest niezwykle wydajny (najbardziej wydajna?) metoda pobierania danych. Nie wiem jednak, czy sprawdzenie kwerendy za pomocą tylko części złożonego klucza partycji jest skuteczne.

W MSSQL byłoby to skuteczne, o ile uwzględnione są komponenty zaczynające się od pierwszego (kolumna1 zamiast kolumny2, w tym przykładzie). Czy tak też jest w przypadku Cassandry? Czy wysyłanie zapytań o wiersze oparte na kolumnie 1 jest bardzo wydajne?

+1

Jeśli chcesz zapytać tylko o część klucza podstawowego, możesz zdefiniować go jako PRIMARY KEY (kolumna1, kolumna2). Oznacza to jednak, że partycje (w których przechowywane są dane) są określone tylko przez kolumnę1. Może to skutkować gorącymi węzłami lub innymi problemami w zależności od liczności kolumny1. Jeśli podasz więcej szczegółów na temat swojego schematu (w szczególności to, co reprezentują kolumny 1 i kolumna 2), możemy zaproponować ci skuteczny środek pośredni. – mildewey

+1

Poszukuję tutaj ogólnej strategii, a nie konkretnego zalecenia. Jednak moim prawdziwym problemem nie jest to, że będę miał hotspoty, ale w pewnym momencie przekroczę limit kolumny o wielkości 2 miliardów, ponieważ używam również klucza klastrowania (znacznika czasu). – Mark

+1

@mildewey również, aby było całkowicie jasne, pytałem o kwerendy oparte na części * klucza * partycji, a nie części klucza * podstawowego *. Jest możliwe, w pewnym sensie, użycie klauzuli IN na ostatniej części klucza partycji. Jest to wystarczające dla mojego przypadku użycia. – Mark

Odpowiedz

11

Tak nie jest w przypadku Cassandry, ponieważ nie jest to możliwe. Czyniąc to przyniesie następujący błąd: "CQL Under the Hood"

Partition key part entity must be restricted since preceding part is

Sprawdź to Cassandra 2014 prezentacja SF Summit od DataStax MVP Robbie Strickland zatytułowanych Slajdy 62-64 pokazują, że pełny klucz partycji jest używany jako klawisz wiersza. W przypadku złożonych kluczy partycjonowania w Cassanderze, musisz zapytać o wszystkie klucze lub ich nie wpisywać.

Możesz obejrzeć complete presentation video here.

4

Jest to niemożliwe w Cassandrze, ponieważ wymagałoby pełnego skanowania tabeli w celu rozwiązania takiego zapytania. Lokalizacja partycji jest zdefiniowana przez skrót wszystkich elementów klucza złożonego, co oznacza, że ​​podanie tylko połowy klucza jest równie dobre, jak jego podanie. Jedynym sposobem znalezienia rekordu jest przeszukanie wszystkich kluczy i sprawdzenie, czy pasują.

+3

"podając tylko połowę klucza jest tak dobra, jak żadna z nich" - ładnie umieścić! – Aaron

Powiązane problemy