如何处理 Infinispan 持久缓存存储中 SoftIndexFileStore 的旧文件?

What to do with old files of the SoftIndexFileStore in Infinispan persistent cache store?

我用 Infinispan (8.2.4 Final) 设置了一个集群缓存存储,使用 SoftIndexFileStore 进行持久化。

文档指出,如果条目过期,Compactor 将无法清除已清除的条目,并且磁盘使用量会随着时间的推移而增加。来自用户指南:

When entries are stored with expiration, SIFS cannot detect that some of those entries are expired. Therefore, such old file will not be compacted (method AdvancedStore.purgeExpired() is not implemented). This can lead to excessive file-system space usage.

我的大部分条目都会过期,但有些条目需要无限期保留,这意味着我不能简单地 运行 每隔一段时间就执行一次清理作业来删除所有数据文件。

如何处理这种浪费的磁盘使用量? 运行ning 数周后,我看到许多文件数周未修改。删除未修改的旧文件是否安全,例如不到一个月前?

否;旧文件不会再被修改(它们被写入一次,然后被认为是不可变的,直到被删除)。手动删除它们可能会导致失败,因为索引中引用了这些文件。

遗憾的是,当迭代存储并且发现条目过期时,Compactor.free() 没有被调用,因为可能有多个并发迭代,我们最终可能会为单个条目调用多次。

一个合适的解决方案是实施一个周期性的(或 JMX 触发的)过程,该过程遍历旧文件,计算 space 被过期条目占用并安排超过压缩阈值的文件。这应该进入 Compactor. Please see SIFS javadoc 的一般设计说明。

如果您有兴趣开发此功能并希望对此进行更多讨论,请转至 Infinispan forum