Как хранилище файлов Infinispan очищает дубликаты ключей, если они периодически помещаются с истечением срока действия?
(Вопрос в разделе запроса к середине)
Окружающая среда:
Infinispan 9.13
Встроенный кеш в кластере с jgroups (но может видеть такое же поведение и в локальном basiccache)
Однофайловое хранилище
Нет явного выселения или пассивации
<persistence passivation="false">
<file-store path="/path/to/file/store" max-entries="-1" purge="false"/>
</persistence>
<memory>
<binary size="certain size here but never expect it to be met" eviction="MEMORY"/>
</memory>
Сценарий:
На определенной частоте (называя его частотой) поток (скажем, ExecutorService.scheduleAtFixedRate(...)) помещает (ключ, значение, freq + buffer, TimeUnit.minutes) в распределенный кеш.
Таким образом, с фиксированной частотой записи помещаются в кэш с буфером продолжительности жизни = freq + (буфер предназначен только для безопасности и намного меньше частоты) для каждого ключа с тем же или другим значением, что и раньше.
Например, вставка может поставить с lifeespan = freq + buffer:
k1, v1
k2, v2
к3, v3
После частоты мы ставим с той же продолжительностью жизни:
k1, v1
k2, v4 (другое значение)
к3, v3
НЕТ выселения, потому что максимальный объем памяти не достигнут
Выпуск:
В одном хранилище файлов кажется, что значения ключей дублируются, и мы проверяем хорошо после следующей частоты + буфер.
Таким образом, файл может находиться в одном файле store.dat:
k1, v1
k1, v1,
k2, v2
k2, v3
(это не точно, а просто представление о том, что находится в хранилище файлов).
Дублирование приемлемо для нас, поскольку программный доступ с помощью get() всегда возвращает обновленное или правильное значение (хотя мы можем никогда не вызывать get для большинства ключей).
Запрос:
Удаляет ли Infispan устаревшие значения из одного файла store.dat, чтобы гарантировать, что хранилище файлов не будет бесконечно увеличиваться с каждым методом put(), потому что на каждой частоте оно добавляет значения ключа в конце или заменяет некоторые на месте внутри файла (некоторые значения ключей дублируются, а из дубликатов некоторые устарели, а некоторые обновляются)?
Не могли бы вы указать мне на документацию / механизм, который гарантирует, что эта очистка действительно происходит, и хранилище файлов не будет расти из-за слишком большого количества дублированных / устаревших / просроченных записей?
Документация ссылается на поток жнеца с истечением срока действия, который просыпается, но здесь он не передает ничего явно для своего интервала (так как в файле xml нет записи, а продолжительность жизни устанавливается программно через put()) - если поток жнеца с истечением времени делает это cleanup Я хотел бы знать и задокументировать интервал пробуждения по умолчанию.
Примечания из документации Infinispan:
Устаревшие и повторяющиеся записи кажутся ожидаемым поведением -
"Если вы не используете выселение, то то, что находится в постоянном хранилище, является в основном копией того, что находится в памяти. Если вы действительно используете выселение, то то, что находится в постоянном хранилище, является в основном надмножеством того, что находится в памяти (то есть включает записи, которые были выселены из памяти). - http://infinispan.org/docs/stable/user_guide/user_guide.html
"Если у вас не настроено выселение, и вы позволили этому времени истечь, это может выглядеть так, как будто Infinispan не удалил запись". - http://infinispan.org/docs/stable/faqs/faqs.html
Очищает ли это дубликаты в одном файле store.dat - "Когда срок действия записи истечет, она будет находиться в контейнере данных или в хранилище кэша до тех пор, пока пользователь не получит доступ к нему снова. Существует также дополнительный жнец с истечением срока действия, который может запускаться с заданным настраиваемым интервалом в миллисекунды, который будет проверять наличие просроченных записей и удалять их ". - Руководство пользователя Infinispan 9.2