Kilka słów o optymalizacji – documentCache

Dobrych kilka miesięcy temu (tutaj) przygadaliśmy się działaniu filterCache. Postanowiłem odświeżyć temat i przyjrzeć się do czego może się nam przydać kolejny cache, czyli documentCache.

Co przechowuje

Utrzymując strukturę poprzedniego wpisu, zacznijmy od środka. Tak więc, documentCache, przechowuje dokumenty Lucene, które zostały pobrane z dysku. Tylko tyle i aż tyle.

Do czego służy

Każdy obiekt (dokument Lucene) przechowywany w documentCache zawiera listę referencji do pól, jakie posiada dany dokument. Dzięki temu, raz pobrany dokument z indeksu, jeżeli jest obecny w documentCache nie musi być po raz kolejny pobierany przy kolejnym zapytaniu. W związku z tym, podczas budowania listy wyników wyszukiwania, liczba operacji I/O jest zmniejszana.

O czym należy pamiętać ?

Korzystając z documentCache należy pamiętać o dwóch dość ważnych rzeczach:

  1. documentCache nie może być automatycznie odświeżany ze względu na to, iż operuje na identyfikatorach, które zmieniają się po każdej operacji commit.
  2. W przypadku, kiedy używamy lazyFieldLoading, (czyli ustawienie enableLazyFieldLoading na true) funkcjonalność documentCache jest ograniczona. Oznacza to, że dokument zapisany w cache będzie posiadał tylko te pola, które zostały podane w parametrze fl. Jeżeli w późniejszym czasie Solr trafi na ten dokument w cache, pola, które wcześniej nie były wczytane, zostaną dynamicznie odczytane z indeksu.

Definicja

Standardowa definicja documentCache  wygląda następująco:

<documentCache
      class="solr.FastLRUCache"
      size="16384"
      initialSize="16384"/>

Przypomnijmy sobie poszczególne parametry:

  • class – klasa odpowiedzialna za implementację,
  • size – maksymalna wielkość,
  • initialSize – początkowa wielkość.

Jak skonfigurować

Odwieczna odpowiedź w przypadku wielkości cache’u. Jak duży powinien być. Zgodnie z tym co jest napisane na wiki Solr (http://wiki.apache.org/solr/SolrCaching#documentCache), maksymalna wielkość nie powinna być mniejsza niż iloczyn liczby równoległych zapytań i maksymalnej liczby dokumentów pobieranych przez zapytania. Dość prosta zależność, która zagwarantuje, że Solr nie będzie musiał ponownie pobierać dokumentów podczas przetwarzania zapytania.

Kilka słów na koniec

W odróżnieniu od filterCache, w przypadku documentCache nie musimy martwić się o to, jak konstruujemy zapytania, aby dobrze wykorzystać ten cache. Należy jednak pamiętać, iż documentCache wymaga tym więcej pamięci, im więcej pól przechowywanych jest w indeksie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active
Save settings
Cookies settings