Jedną z ciekawszych rzeczy, którą wyniosłem z zeszłorocznej edycji konferencji ByteBay była informacja o aliasach indeksów w Elasticsearchu i o potencjalnych sposobach ich użycia. Niedawno miałem okazję wykorzystać je produkcyjnie. Dziś chciałbym podzielić się z Wami czym są owe aliasy i do czego można je wykorzystać.

Czym są aliasy indeksów?

Obstawiam, że ciężko jest się nie domyślić czym są aliasy indeksów. Za tą nazwą nie kryje się nic tajemniczego. Są to po prostu dodatkowe nazwy dla naszych indeksów, po których możemy odpytywać Elasticsearch. W większości przypadków wygląda to tak, że wszędzie tam gdzie możemy wstawić nazwę indeksu, możemy też wstawić jego alias. Dodatkowo mają one kilka ciekawych właściwości, które naprawdę przypadły mi do gustu.

Przykłady użycia

Załóżmy sobie, że tworzymy portal będący bazą wiedzy na temat Gwiezdnych wojen. Do Elasticsearcha wrzucamy cytaty kilku postaci. Każda postać ma swój dedykowany indeks.

Wrzucamy Yodę:

Szukamy go:

Jest:

Wrzucamy Dartha Vadera:

Szukamy go:

Jest:

Nasz pierwszy alias

Jeden z programistów naszego portalu wymyślił sobie jednak, że chciałby zapytać o cytaty ojca Luke’a:

Nie ma:

No ale przecież wiemy, kto jest ojcem Luke’a. Może w takim razie skopiujemy jeszcze raz cytaty Dartha Vadera i wrzucimy je pod indeks lukes_father?

No ale jak to? Tak się powtarzać?! Każdy kolejny update na danych będziemy musieli robić podwójnie. I tu właśnie wkracza nasz bohaterski alias.

Tworzymy alias lukes_father dla istniejącego indeksu vader:

Pytamy jeszcze raz:

Jest! Mamy to! Warto zauważyć, że mimo pytania poprzez alias, w polach _index znajduje się nazwa właściwego indeksu:

Przepinanie aliasu

Tym razem nasz nadgorliwy programista chciałby znaleźć cytaty najsilniejszego Jedi:

Niestety nie znalazł odpowiedzi:

I wtedy wchodzi alias, cały na biało:

Od teraz najsilniejszym Jedi jest Yoda:

Yoda jednak w pewnym momencie „schodzi ze sceny”. Aktualizujemy więc najsilniejszego Jedi:

A kiedy nasz programista zapyta ponownie:

To otrzyma zaktualizowane dane:

One alias to rule them all

Kolejnego dnia nasz programista chciałby przygotować zbiorczą podstronę zwierającą cytaty wszystkich postaci z Gwiezdnych wojen. Pyta więc:

Ale odpowiedzi nie dostaje:

I znów ratują nas aliasy. Jedną z zapowiedzianych ciekawych właściwości, jest możliwość dodania tego samego aliasu do kilku indeksów:

Pytamy ponownie:

I voilà:

Po kilku latach działania portalu okazało się, że twórcy Gwiezdnych wojen dostarczyli nam nowego bohatera. Dodajemy więc jego cytaty do dedykowanego indeksu:

Upewniamy się, czy wszystko działa:

Działa:

Hmm… po chwili przypomniało nam się o zbiorczej stronie z cytatami wszystkich bohaterów. Dzięki aliasom wystarczy, że dodamy odpowiedni do świeżo stworzonego indeksu:

I kiedy znów zapytamy:

To Finn już tam będzie:

Prawda, że fajnie?

Edycja danych poprzez alias

Okazuje się również, że aliasy nie służą wyłącznie do odczytu. Możemy je wykorzystywać również do zapisu.

Na przykład nie mam problemu z dodaniem kolejnego cytatu, który padł z ust ojca Luke’a:

W odpowiedzi od razu otrzymamy informację, do jakiego indeksu wpadł nowo dodany dokument:

Możemy teraz sprawdzić, że niezależnie od tego, czy zapytamy przez alias:

Czy też bezpośrednio przez indeks:

To odpowiedź zawsze będzie wyglądała tak samo:

W tym miejscu może nasunąć się pytanie: a co z zapisem do aliasu, który wskazuje na kilka indeksów?

Sprawdźmy:

A Elasticsearch na to:

Logiczne 🙂

Dopóki alias wskazuje na jeden indeks, to nie ma problemu z wykonywaniem działań przeznaczonych do wykonania na pojedynczym indeksie. Jeżeli jednak alias wskazuje na więcej niż jeden indeks, to Elasticsearch sam nie zdecyduje, na którym indeksie ma wykonać akcję.

Od wersji 6.4 możemy mu w tym pomóc przy pomocy parametru is_write_index. Dzięki niemu, w momencie tworzenia indeksu możemy określić, czy dany indeks jest tym do zapisu. Żeby wszystko śmigało, dokładnie jeden indeks w aliasie może być do zapisu. Reszta musi mieć ustawione is_write_index na false.

Do czego to się może przydać?

Aliasy indeksów są dla mnie ciekawą opcją pozwalającą wprowadzić dodatkowy bufor bezpieczeństwa pomiędzy aplikacją korzystającą z Elasticsearch, a naszym indeksem. Wykorzystania aliasu jako pośrednika pozwala nam przykładowo na wprowadzanie zmian w kopii naszego indeksu gdzieś „na boku”, bez grzebania bezpośrednio w indeksie produkcyjnym. Kiedy efekty zmian będą satysfakcjonujące, w mgnieniu oka możemy podmienić indeks na nowy poprzez proste przepięcie aliasu z jednego indeksu na drugi. A w aplikacji produkcyjnej nikt nawet nie zauważy przestoju.

Kolejnym pomysłem jest określanie widoczności danych, w których możemy wyszukiwać. Załóżmy na przykład, że w aplikacji umożliwiamy przeglądanie użytkownikom jakichś statystyk. Statystyki z każdego dnia są wrzucane codziennie do nowego indeksu w Elasticsearchu. Dokładając do tego wszystkiego alias możemy określić, z których dni chcemy udostępniać nasze statystyki, a które zostawiamy tylko dla siebie. A może po jakimś czasie starsze statystyki nie są już wiele warte i nie chcemy ich dłużej pokazywać? Korzystając z aliasu załatwimy sprawę odpinając go od przestarzałych indeksów.

To jeszcze nie wszystko

Jeżeli zainteresował Cię temat aliasów, to zachęcam do doczytania dokumentacji. Znajdziesz tam jeszcze kilka ciekawostek. Szczególnie interesująca i przydatna może być opcja tworzenia aliasów filtrujących. Temat jest bardzo prosty. Wykorzystując parametr filter podczas tworzenia aliasu sprawiamy, że nie będzie on pokazywał wszystkich dokumentów z indeksu, a jedynie te spełniające określone kryteria filtrujące.

The End

Mam nadzieję, że czytając ten artykuł od razu wpadło Ci do głowy kilka pomysłów na wykorzystanie aliasów w Twoim projekcie. A może masz już za sobą jakieś ciekawe przypadki użycia? W obu przypadkach chętnie przeczytam o tym w komentarzu poniżej.


Bądź na bieżąco!

Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:

Dołączając do newslettera #NoweRozdanie2 otrzymasz dostęp do dodatkowych materiałów:

  • PDF: „Jednoosobowa działalność gospodarcza krok po kroku” (do artykułu)
  • PDF: „FAQ: Jak pracuje się dla Roche/Sii?” (do artykułu)
  • PDF: „Jak zmniejszyć prawdopodobieństwo wystąpienia kontroli i co zrobić kiedy urzędnik zapuka do Twoich drzwi?” (do artykułu)

Powyższe dane są przechowywane w systemie Mailchimp i nie są udostępniane nikomu innemu. Więcej szczegółów znajdziesz na stronie polityki prywatności.

lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować :)

Dołącz do grup na Facebooku

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.

W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.

Wesprzyj mnie

Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.

Postaw mi kawę na buycoffee.to

Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.

Picture Credits