6.8. 基于文件的缓存存储
基于文件的缓存存储在运行 Data Grid 的本地主机文件系统中提供持久性存储。对于群集缓存,基于文件的缓存存储对于每个 Data Grid 节点来说是唯一的。
切勿使用共享文件系统上的基于文件系统的缓存存储,如 NFS 或 Samba 共享,因为它们不提供文件锁定功能和数据崩溃。
另外,如果您试图将事务缓存与共享文件系统搭配使用,在提交阶段写入文件时无法恢复的故障时可能会出现。
soft-Index File Stores
SoftIndexFileStore
是基于文件的缓存存储的默认实现,并将其数据存储在仅附加文件中。
当只附加文件时:
- 达到其最大大小,Data Grid 将创建一个新文件并开始写入该文件。
- 达到 50% 用量小于 50% 的压缩阈值,Data Grid 会将条目覆盖到新文件,然后删除旧文件。
b+ 树
为提高性能,可使用 B+ 树 在磁盘和内存中存储 SoftIndexFileStore
中仅附加文件进行索引。内存索引使用 Java 软引用来确保在 Garbage Collection (GC)中删除后重新进行重建。
由于 SoftIndexFileStore
使用 Java 软引用来保留索引内存,所以它有助于防止内存不足的情况。GC 在消耗太多内存前删除索引,同时仍然回退到磁盘。
您可以使用索引元素中的 片段
属性,或使用
方法来配置任意数量的 B+ 树。默认情况下,数据网格创建最多 16 个 B+ 树,这意味着最多可以有 16 个索引。有多个索引可防止对索引进行并发写入操作,并减少数据网格需要在内存中保留的条目数量。由于迭代了 soft-index 文件存储,Data Grid 会同时读取索引中的所有条目。
index
Segments ()
B+ 树中的每个条目都是节点。默认情况下,每个节点的大小限制为 4096 字节。如果键在序列化后较长,SoftIndexFileStore
会抛出异常。
分段
soft-index 文件存储始终被分段。
AdvancedStore.purgeExpired ()
方法在 SoftIndexFileStore
中未实现。
单个文件缓存存储
单个文件缓存存储现已弃用,计划删除。
单个文件缓存存储、单一文件存储
、将数据存储在文件中。数据网格还维护一个内存密钥索引,而键和值则存储在 文件中。
由于 SingleFileStore
会保留内存密钥索引和值位置,它需要额外内存,具体取决于密钥大小和键的数量。因此,不建议使用 SingleFileStore
,其中键较大或者有多个密钥。
在某些情况下,single FileStore
也可能会变得碎片。如果值大小持续增加,则不会使用单一文件中的可用空间,但该条目附加到文件的末尾。只有在条目可以容纳时,才会使用该文件中的可用空间。同样,如果您从内存中删除所有条目,则单个文件存储的大小不会降低或进行碎片整理。
分段
默认情况下,单个文件缓存被分段,每个片段使用单独的实例,这样会导致多个目录。每个目录都是代表数据映射的片段的数字。
6.8.1. 配置基于文件的缓存存储 复制链接链接已复制到粘贴板!
将基于文件的缓存存储添加到 Data Grid,以在主机文件系统中持久保留数据。
先决条件
- 如果您配置嵌入缓存,请启用全局持久位置。
流程
-
将
persistence
元素添加到缓存配置中。 -
(可选)指定
true
作为 passivation 属性的值,仅在数据从内存驱除时写入基于文件的缓存存储
。 -
包含
file-store
元素,并根据情况配置属性。 指定
false
作为shared
属性的值。基于文件的缓存存储应该始终特定于每个数据网格实例。如果要在集群中使用相同的持久性,请配置共享存储,如 JDBC 字符串的缓存存储。
-
配置
索引
和数据元素,以指定数据网格创建索引和存储数据的位置。 -
如果要使用
write-behind
模式配置缓存存储,请包含 write-behind 元素。
基于文件的缓存存储配置
XML
JSON
YAML
ConfigurationBuilder
6.8.2. 配置单个文件缓存存储 复制链接链接已复制到粘贴板!
如果需要,您可以配置 Data Grid 来创建单一文件存储。
单个文件存储已弃用。与单一文件存储相比,您应该使用 soft-index 文件存储提高了性能和数据一致性。
先决条件
- 如果您配置嵌入缓存,请启用全局持久位置。
流程
-
将
persistence
元素添加到缓存配置中。 -
(可选)指定
true
作为 passivation 属性的值,仅在数据从内存驱除时写入基于文件的缓存存储
。 -
包含
single-file-store
元素。 -
指定
false
作为shared
属性的值。 - 根据需要配置任何其他属性。
-
包含
write-behind
元素,以将缓存存储配置为后面的写入操作,而不是作为写入操作。
单个文件缓存存储配置
XML
JSON
YAML
ConfigurationBuilder