2011-06-20 9 views
10

W jaki sposób indeks zapasowy Cassandra działa wewnętrznie? Docs stwierdzić, że jest jakiś Główna Hash:Cassandra i wtórne indeksy, jak działają wewnętrznie?

Biorąc mam colum username="foobar" (nazwa kolumny będzie wskaźnik scondary) w CF User z RandomOrderingPartitioner

  1. Czy mój asumption poprawne, że Cassandra używa "Distributed Hash Index" (= tak, że indeks nie znajduje się na jednym węźle = podział indeksu)?
  2. Na ile węzłów znajduje się część indeksu (tyle samo co współczynnik replikacji)?
  3. Na których węzłach znajdują się części indeksu (czy Cassandra dzieli indeks według tej samej logiki co klucz z RandomOrderingPartitioner)?

  4. W przypadku, gdy indeks jest trzymać się tylko jeden węzeł (i oczywiście replikowane), w jaki sposób Cassandra „determin” węzła, który jest odpowiedzialny za indeksem (By mieszania się columname a następnie za pomocą Logik randompartitioner do określenia węzeł)?

  5. Czy to prawda, że ​​ten indeks jest zoptymalizowany pod kątem niskiej liczności? Jeśli tak, to jaka jest przybliżona ocena ( jest konkretna liczba, której mogę użyć do oceny), że nie powinienem używać indeksu wtórnego (i raczej użyć oddzielnego CF dla indeksu)? Albo inaczej powiedziałeś, jak obliczyć liczność i podjąć właściwą decyzję?

Próbuję to zrozumieć.

+0

Co to jest "dlaczego?" za tym pytaniem? Czy jest jakiś konkretny problem, który próbujesz rozwiązać, czy próbujesz wypełnić luki w swoim zrozumieniu? –

+1

Pytanie dotyczące podkładania odnosi się do "wydajności". Zarządzanie indeksami "Ręcznie", ponieważ nowe systemy CF są bardzo uciążliwe. Drugorzędne indeksy są łatwe w utrzymaniu, ale (jak wskazuje problem Kardynalności) wydają się nie pasować do ważnych potrzeb. Ponadto mogłem "odładować" niektóre elementy indeksujące na inne warstwy w mojej aplikacji. Dlatego chcę trochę zrozumieć, w jaki sposób działają wewnętrzne indeksy, jakie są ich PRO i CON i jak realnie działają. – Markus

Odpowiedz

11

Wtórne indeksy są po prostu kolejną rodziną kolumn. Nie są bezpośrednio dostępne dla użytkowników, ale można zobaczyć statystyki za pośrednictwem fasoli JMX: org.apache.cassandra.db.IndexedColumnFamilies

Można skonsultować statystyki, żeby ocenić skuteczność indeksu jak nagrywasz normalny rodzina kolumn.

Aby uzyskać więcej informacji zobacz te poprzednie posty:

How are Cassandra's 0.7 Secondary Indexes stored?

How scalable are automatic secondary indexes in Cassandra 0.7?

A skoro masz tag Hector, tu jest link do testu dla IndexedSlicesQuery: https://github.com/rantav/hector/blob/master/core/src/test/java/me/prettyprint/cassandra/model/IndexedSlicesQueryTest.java

+0

Podążałem za tym przykładem bardzo uważnie i ciągle otrzymuję przerażające: Powodowane przez: InvalidRequestException (dlaczego: brak indeksowanych kolumn w klauzuli indeksu z operatorem EQ) –