2013-10-08 25 views

Odpowiedz

12

Główna różnica polega na tym, że indeksy wtórne w Cassandrze nie są dystrybuowane w taki sam sposób, jak indeks ręczny odwrócony. Dzięki wbudowanym indeksom dodatkowym każdy węzeł indeksuje dane przechowywane lokalnie (przy użyciu LocalPartitioner). Przy ręcznym indeksowaniu indeksy są dystrybuowane niezależnie od węzłów przechowujących wartości.

Oznacza to, że w przypadku wbudowanych indeksów każde zapytanie musi być przekazywane do każdego węzła, natomiast jeśli indeksowanie odwrócone zostało wykonane ręcznie, wystarczyłoby przejść do jednego węzła (plus repliki), aby sprawdzić wartość, na którą patrzysz. Jedną z zalet posiadania lokalnego indeksu jest to, że indeksy mogą być aktualizowane atomicznie danymi. (Chociaż od wersji Cassandra 1.2 partie atomowe mogą być użyte zamiast tego, chociaż są nieco wolniejsze.)

Z tego powodu indeksy Cassandry nie są zalecane dla naprawdę dużych danych liczności. Jeśli robisz odnośnika na każdym węźle, ale istnieje tylko jeden lub dwa wyniki, to jest nieefektywne i ręczny odwrócony wskaźnik będzie lepiej. Jeśli twoje wyszukiwanie zwróci wiele wyników, to i tak będziesz musiał sprawdzić na każdym węźle, więc wbudowane indeksy działają dobrze.

Kolejną zaletą korzystania z wbudowanego indeksowanie Cassandry jest to, że indeksy są aktualizowane leniwie, więc nie trzeba robić odczytu na każdej aktualizacji. (Patrz CASSANDRA-2897). Może to być znacząca poprawa prędkości indeksowanych tabel z wysokiej przepustowości zapisu.

+3

Zainspirowany to pytanie, napisałem bardziej szczegółową odpowiedź na moim blogu: www.wentnet.com/blog/?p=77 – Richard

+0

ironia awarii połączenia z bazą danych – devshorts