Jak Elasitcsearch przechowuje petabajty danych? 🤔

Elasticsearch to baza danych potrafiąca przechowywać i przetwarzać petabajty danych. W jaki sposób jest w stanie to robić?

Jak Elasitcsearch przechowuje petabajty danych? 🤔
Photo by imgix / Unsplash

Elasticsearch to świetne narzędzie do przeszukiwania petabajtów danych.

Zapewne o nim słyszałeś, ale co sprawia, że tak dobrze się skaluje?

Najważniejszym elementem skalowalności Elasticsearcha jest możliwość uruchomienia go na wielu maszynach - tzw. nodach.

Mówimy o tym, że jest to skalowanie horyzontalne.

To znaczy, że dane przetwarzane i przechowywane przez Elastica są rozproszone na wiele maszyn, a dzięki wewnętrznym mechanizmom klienty odpytujące Elastica otrzymują zagregowane dane.

Twoja regularna baza danych, typu SQL, prawdopodobnie skaluje się jedynie wertykalnie.

To znaczy, że aby przetwarzać więcej danych jedyne co możesz zrobić to zwiększyć parametry maszyny, na której jest ona hostowana.

Elasticsearch natomiast jest w stanie być uruchomiony na dziesiątkach, czy setkach maszyn.

Jak to się dzieje? 🤔

Dane w Elasticsearchu przechowywane są w shardach, czyli najmniejszych niepodzielnych strukturach danych. Shardy te rozkładane są na dostępne w klastrze Elastica maszyny - wspomniane wcześniej nody.

Podczas tworzenia indeksu (tabeli z dokumentami) ustalasz ile chcesz przeznaczyć na niego shardów. Następnie w zależności od dostarczonych w klastrze nodów, te shardy są automatycznie rozdzielane tak by zapewnić jak najwyższą dostępność i niezawodność.

Dobrą praktyką jest tworzenie shardów głównych (primary) i replik (replica). Shardy replik służą jako kopie danych, zapewniając tym samym wysoką dostępność.

Podczas wykonywania zapytań do Elasticsearcha klaster sam decyduje, które shardy odpytać (primary lub replica) tak by dostarczyć Ci ostateczny wynik w jak najkrótszym czasie.

Na koniec zebrane na poszczególnych shardach wyniki są agregowane w nodzie koordynującym i ostateczny wynik zwracany jest do klienta.

Dzięki temu, gdy agregujesz zwiększające się zasoby danych, Elasticsearch jest w stanie rozłożyć je na wiele shardów i wiele nodów a następnie zwracać wyniki z powrotem.

W ten sposób może być świetną alternatywą dla Twojej puchnącej bazy SQL, gdy potrzebujesz przeszukiwać tysiące lub miliony dokumentów w maksymalnie krótkim czasie.

A Ty stosujesz Elasticsearch w swoich systemach?

Jeśli tak, daj znać w jakich scenariuszach spisują się najlepiej.