(クエリセクションの中ほどの質問)
環境:
インフィニスパン 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>
シナリオ:
特定の頻度 (freq と呼ぶ) で、スレッド (ExecutorService.scheduleAtFixedRate(...) など) は分散キャッシュに put(key, value, freq + buffer, TimeUnit.minutes) を実行します。
そのため、固定された頻度で、以前と同じ値または異なる値を持つ各キーのライフスパン = 頻度 + バッファー (バッファーは安全のためのものであり、頻度よりもはるかに少ない) でエントリがキャッシュに入れられます。
たとえば、挿入は lifespan=freq+buffer で配置できます。
k1、v1
k2、v2
k3、v3
頻度の後、同じ寿命を設定します。
k1、v1
k2、v4 (異なる値)
k3、v3
最大メモリサイズに達していないため、エビクションは発生していません
問題:
単一のファイル ストアでは、キー値が重複しているようで、次の頻度 + バッファの後で十分に確認しています。
したがって、ファイルは単一のファイル store.dat に含まれる可能性があります。
k1,v1
k1、v1、
k2,v2
k2、v3
(これは正確ではありませんが、ファイル ストア内の内容を表したものです)。
get() を使用してプログラムでアクセスすると、常に更新された値または正しい値が返されるため、重複は許容されます (ただし、ほとんどのキーで get を呼び出すことはありません)。
クエリ:
infinispan は単一のファイル store.dat から古い値をクリーンアップして、ファイル ストアが各 put() で無期限に拡大しないようにしますか。これは、各頻度で最後にキー値を追加するか、ファイル内のインプレースを置き換えるためです (一部の Key-Value が重複しており、重複の一部は古く、一部は更新されています)?
このクリーンアップが行われ、重複/古い/期限切れのエントリが多すぎるためにファイルストアが拡大しないことを保証するドキュメント/メカニズムを教えてください。
ドキュメンテーションは、ウェイクアップする失効リーパー スレッドを参照していますが、ここでは、その間隔について明示的に何も渡していません (xml ファイルにエントリがなく、寿命が put() を介してプログラムで設定されているため) - 失効リーパー スレッドがこれを実行している場合デフォルトのウェイクアップ間隔を知り、文書化したいです。
Infinispan のドキュメントからのメモ:
古くて重複したエントリは、予期された動作のようです -
「エビクションを使用しない場合、永続ストアにあるものは基本的にメモリにあるもののコピーです。エビクションを使用する場合、永続ストアにあるものは基本的にメモリにあるもののスーパーセットです (つまり、されたエントリが含まれます)記憶から追い出された)」- http://infinispan.org/docs/stable/user_guide/user_guide.html#cache_loader_behavior_with_passivation_disabled_vs_enabled
「エビクションが構成されておらず、この時間が期限切れになるまで放置すると、Infinispan がエントリを削除していないように見える可能性があります。」- http://infinispan.org/docs/stable/faqs/faqs.html#expiration_does_not_work_what_is_the_problem
これは単一ファイル store.dat の重複をクリーンアップしますか? - 「エントリの有効期限が切れると、ユーザー要求によって再びアクセスされるまで、エントリはデータ コンテナまたはキャッシュ ストアに存在します。有効期限が切れたエントリをチェックして削除する、指定されたミリ秒単位の設定可能な間隔で実行できるオプションの有効期限リーパーもあります。」- Infinispan 9.2 ユーザーガイド