Функция Кэша в FieldcacheImpl - PullRequest
1 голос
/ 05 марта 2012

Я пытался проанализировать FieldCacheImpl в Solr 3.5.0. Может ли кто-нибудь объяснить мне или дать мне указатель, чтобы узнать, что абстрактная Class Cache выполняет заранее?

Спасибо и С уважением,

Jeyaprakash.

1 Ответ

1 голос
/ 05 марта 2012

Как вы можете видеть в FieldCache.java, есть несколько различных способов загрузки кеша поля (getBytes, getInts, getStringIndex, getStrings, ...).Вот почему FieldCacheImpl поддерживает map (type -> cache).

Сегменты Lucene предназначены для однократной записи и только для чтения, поэтому вы хотите загрузить кэш полей только один раз, а затем всегда повторно использовать один и тот же экземпляр.,Cache - это вспомогательный класс, который помогает достичь этого: это обертка вокруг map (segment -> map (field -> fieldcache instance)).(Под экземпляром fieldcache я имею в виду byte[] для метода getBytes, String[] для метода getStrings, ...)

  • Когда сегмент не являетсяиспользуется больше (если больше нет открытого читателя, использующего его), вы хотите, чтобы GC мог вернуть кэш поля, поэтому эта карта является WeakHashMap .

  • Существуют различные реализации Cache, потому что логика не одинакова при загрузке (например) кэша String и кэша StringIndex (см. Cache#createValue(AtomicReader, Entry, boolean)).

...