Solr 4.3: Dzielenie shard’ów – szybkie spojrzenie

Wraz z wersją 4.3 serwera wyszukiwania Apache Solr dostaliśmy bardzo długo oczekiwaną funkcjonalność – możliwość dzielenia części kolekcji kiedy korzystamy z wdrożenia opartego o SolrCloud. W tym wpisie chcieliśmy wypróbować nową funkcjonalność i zobaczyć jak działa. Do dzieła więc.

Kilka słów na początek

Wybór odpowiedniej liczby części z jakich będzie składała się nasza kolekcja był do tej pory jedną z niewiadomych, których wartość musieliśmy znać przed wdrożeniem. Kiedy tylko stworzyliśmy kolekcję nie mogliśmy zmienić liczby shardów z jakich się składa, mogliśmy dodawać tylko nowe repliki. Oczywiście niosło to za sobą konsekwencje – jeżeli nasze zalożenia nie były prawidłowe mogło się okazać, iż liczba shardów jest niewystarczająca. Mogliśmy wtedy tylko zalożyć nową kolekcję z inną konfiguracją, a następnie przeindeksować dane. Aż do chwili, kiedy pojawił się Apache Solr 4.3, a wraz z nim możliwość dzielenia na części stworzonej już kolekcji.

Mały klaster

W celu przetestowania nowej funkcjonalności postanowiłem uruchomić klaster składający się z jednej instancji Solr oraz z wbudowanym ZooKeeperem oraz przykładową kolekcją dostarczaną wraz z Solr. W tym celu użyłem następującej komendy:

Po uruchomieniu Solr widok klastra przedstawiał się następująco:

after_start

Testowe dane

Do testów potrzebne są także jakieś dane, postanowiłem więc skorzystać z przykładowych dostarczanych z Solr i uruchomić następujące polecenie w katalogu exampledocs:

Liczbę zaindeksowanych dokumentów sprawdzić można wykonując następującą komendę:

Na którą Solr odpowiedział następująco:

Jak widać zaindeksowanych zostało dokładnie 32 dokumenty.

Podział shard’a

Spróbujmy zatem podzielić nasz pojedynczy shard, z którego składa się nasza kolekcja. W tym celu wykorzystamy API kolekcji i nową akcję o nazwie SPLITSHARD, która w podstawowej wersji przymuje dwa parametery – collection, czyli nazwę kolekcji na której chcemy wykonać operację oraz shard, czyli nazwę shard’a którego chcemy podzielić. W naszym wypadku komenda, która podzieli kolekcję jest następująca:

Po chwili, jeżeli wszystko przebiegło poprawnie, powinniśmy dostać od Solr odpowiedź informującą o przebiegu operacji podziału, wyglądającą mniej więcej tak:

Wygląd klastra po podziale

Po podziale nasz klaster wygląda następująco:

after_splitJak widać powstały dwa nowe shardy, które teoretycznie powinny zawierać dokumenty z shard1 – część z dokumentów powinny trafić do części oznaczonej shard1_1, a część do shard1_0. Ponownie korzystając z panelu administarcyjnego Solr możemy sprawdzić odpowiednie core’y:

Shard1_1

Statystki cześci kolekcji oznaczonej jako Shard1_1 wyglądają następująco:

shard_1_1

Shard1_0

Natomiast statystki cześci kolekcji oznaczonej jako Shard1_0 wyglądają następująco:

shard_1_0

Jak widać z 32 dokumentów, które były dostępne w oryginalnej części kolekcji powstały dwie części kolekcji – jedna przechowująca 18 dokumentów,  a druga przechowująca 14 dokumentów. Teoretycznie się zgadza 🙂

Porządki

Na sam koniec zostawiłem sobie porządki. Po pierwsze, aby dane w nowych shardach były widoczne musimy wysłać polecenie commit do naszej kolekcji, np w następujący sposób:

Możemy także usunąć oryginalny shard z kolekcji, korzystając np. z panelu administracyjnego Solr lub też używając CoreAPI.

Ostatni test

Jako podsumowanie postanowiłem sprawdzić, czy na pewno dokumenty są dostępne w odpowiednich częściach kolekcji. W tym celu skorzystałem z następującego polecenia:

Odpowiedź Solr na powyższe zapytanie była następująca:

Jak widać dokumenty pochodzą z obu nowych shardów, czyli znów widać, że wszystko się zgadza. Do samego tematu podziału kolekcji na pewno jeszcze wrócimy.

2 thoughts on “Solr 4.3: Dzielenie shard’ów – szybkie spojrzenie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *