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 *