2014-07-25 8 views
5

Rozważmy następujący przykład:Co robi "tworzenie indeksu" w tabelach kassandra?

create table bite (
     id varchar PRIMARY KEY, 
     feedid varchar, 
     score bigint, 
     data varchar 
); 

create index bite_feedid on bite (feedid); 
create index bite_score on bite (score); 

nie jestem pewien co dwie ostatnie linie create index.. zrobić? dlaczego to jest ważne? Czy tworzy nowy stół? Jeśli tak, jak mogę to sprawdzić?

Dzięki

Odpowiedz

6

Indeks pomocniczy tworzy nową tabelę przy użyciu indeksowanej kolumny jako klucza podstawowego. Zaletą tego podejścia jest to, że operacje zapisu/usuwania w tabeli będą automatycznie tłumaczone na operacje wielokrotne, nie musisz się tym przejmować. Teraz, gdy Cassandra obsługuje rejestrowane partie, może nie wydawać się dużą zaletą, ale w Cassandrze 0.7 ... 1.1 było dużym problemem.

Wtórne indeksy nie powinny być używane, gdy zapytanie na indeksie pobierze zawsze jeden wynik (np. Wprowadzenie indeksu wtórnego na uuid).

Dobra cecha s.i. jest to, że można wysyłać zapytania do pojedynczej kolumny bez znajomości klucza głównego i łączyć część klucza podstawowego z indeksem dodatkowym (przy użyciu operatora AND).

Nie można wykonać klauzuli WHERE z wieloma indeksami pomocniczymi połączonymi w AND.

HTH, Carlo

+0

możesz pomóc w tym: http://stackoverflow.com/questions/ 24964673/can-to-start-cqlsh-in-mac-os-x – eagertoLearn

+0

done :) sprawdź to –

+0

możesz podać przykład ilustrujący ten punkt: Wtórne indeksy nie powinny być używane, gdy zapytanie na indeksie pobierze zawsze jeden wynik (np. wprowadzenie indeksu wtórnego na uuid). – eagertoLearn

2

zwykle w tradycyjnych baz tworzenia wskaźnika będzie używać struktury danych przykładowo wypowiedzieć HashMap której klucze będzie indeksowane kolumny, a wartość wskazuje na rzeczywiste wiersza w tabeli. Dzięki temu zapytanie może pobierać wyniki na podstawie klucza indeksu w przybliżeniu O (1).

W jaki sposób tworzony jest indeks? Każdy klucz w indeksowanej kolumnie jest mieszany za pomocą funkcji mieszającej, która zwraca wartość i jest używana jako indeks.

W bazie danych Cassandra, ponieważ dane (tj.) Jest dystrybuowana konkretna kolumna, zastosowano specjalny mechanizm w celu uzyskania powyższego indeksowania.

Indeksowanie oznacza szybkie pobieranie lub szybkie czytanie. Ale uwaga jest zbyt duża indeksowania prowadzi również do jego złych rzeczy, takich jak kolizje w indeksowanych kluczy.

+0

jest indeksem innej tabeli? Jeśli ma strukturę danych takich jak hashMap, to musi być gdzieś zatrzymana, żeby ją sprawdzić? jak miałby do niego dostęp? czy możesz dać przykład? – eagertoLearn

+0

Tak, że indeks jest inną tabelą. Możesz uzyskać dostęp do wszystkich indeksów z systemu keyspace. Nie mam przykładu. Ale to naprawdę pomogłoby Ci http://stackoverflow.com/questions/21092524/cassandra-2-list-existing-indexes-with-cql-3 – rozar

5

Utwórz indeks tworzy indeks wtórny dla tabeli. W języku Kasandra dane są przechowywane w partycjach w węzłach - jedna partycja odpowiada jednemu kluczowi partycji - który jest pierwszym kluczem klucza podstawowego. Pozostałe klucze w kluczu podstawowym stanowią klucze do klastrowania. Na przykład, jeśli miał następujące:

CREATE TABLE foo.people (id int , nazwa tekstu wiek int, tekst pracy, PRIMARY KEY (id, nazwa, praca) )

id będzie kluczem partycji, a nazwa i zadanie będą kluczami do klastrowania.

Dane w partycji są przechowywane według kolejności kluczy klastrowych. Podczas wysyłania zapytań za pomocą filtrów określasz klucz partycji, a następnie możesz filtrować na podstawie kluczy klastrowych. W przypadku kluczy wielokrotnego tworzenia klastrów musisz określić wcześniejszą klastrowanie, aby użyć konkretnej. Na przykład, we wspomnianym scenariuszu można zrobić

gdzie id = 2 a name = 'John' i praca = 'dev' lub gdzie id = 2 a name = 'John'

ale nie gdzie id = 2 i job = 'dev' jak nazwa pojawia się przed zadaniem w kluczu klastrowania.

Nie można filtrować według wieku, ponieważ nie jest częścią klucza. Tutaj pojawia się indeks wtórny. Jeśli wykonasz: utwórz indeksu bla na ludzi (wiek)

będziesz mógł to zrobić: wybierz * od osób, w których wiek = 45;

Może to być potencjalnie kosztowne, ponieważ spowoduje wysłanie zapytania do klastra. Następujące elementy mogą być wydajne: wybierz * od osób, których id = 2 i wiek = 45;

Jest to przydatne w przypadku szeregów czasowych lub innych formatów szerokiego rzędu.

Zapytania o wskaźniki wtórne są restrykcyjne - na przykład nie można wykonywać zapytań dotyczących zakresu - ogranicza się to do = sprawdzeń.

Wtórne indeksy w kassandra mogą zaoszczędzić Ci kłopotów z utrzymaniem tabel indeksów i są bardziej wydajne niż gdybyś zrobił to ręcznie. W końcu są spójne (twoje zapisy nie czekają na zaktualizowanie indeksów, aby powrócić do sukcesu), a obecnie informacje o indeksie dla danych węzła są przechowywane lokalnie.

Wreszcie można znaleźć indeksy aktualnie z tabeli "IndexInfo" w systemie keyspace.

Nadzieję, że pomaga.