Как хранилище файлов 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

0 ответов

Другие вопросы по тегам