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:
- 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.
- 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.