6.12. rocksdb 缓存存储
rocksdb 提供基于密钥值的文件系统存储,具有高度并发环境的高性能和可靠性。
rocksdb 缓存存储 RocksDBStore
使用两个数据库。一个数据库为内存中的数据提供主缓存存储 ; 其他数据库包含 Data Grid 从内存过期的条目。
参数 | 描述 |
---|---|
| 指定提供主缓存存储的 RocksDB 数据库的路径。如果您没有设置位置,则会自动创建。请注意,该路径必须相对于全局持久位置。 |
| 指定 RocksDB 数据库的路径,该数据库为过期数据提供缓存存储。如果您没有设置位置,则会自动创建。请注意,该路径必须相对于全局持久位置。 |
| 为过期条目设置内存队列的大小。当队列达到大小时,Data Grid 清空到 RocksDB 缓存存储中的过期。 |
| 在删除并重新初始化(重新初始化)之前设置 RocksDB 数据库的最大条目数。对于较小的大小缓存存储,迭代所有条目并单独删除每个条目可以提供一种更快的方法。 |
调优参数
您还可以指定以下 RocksDB 调优参数:
-
compressionType
-
blockSize
-
cacheSize
配置属性
另外,还可在配置中设置属性,如下所示:
-
为数据库添加前缀属性来调整和调优 RocksDB 数据库。
-
前缀属性
及数据
,以配置 RocksDB 存储您的数据的列系列。
<property name="database.max_background_compactions">2</property> <property name="data.write_buffer_size">64MB</property> <property name="data.compression_per_level">kNoCompression:kNoCompression:kNoCompression:kSnappyCompression:kZSTD:kZSTD</property>
分段
RocksDBStore
支持分段,并为每个网段创建一个单独的列系列。分段的 RocksDB 缓存存储提高了查找性能和迭代,但对写操作的性能稍降低。
您不应该配置几百个片段。rocksdb 不设计为具有无限数量的列系列。太多片段也会显著增加缓存存储启动时间。
rocksdb 缓存存储配置
XML
<local-cache> <persistence> <rocksdb-store xmlns="urn:infinispan:config:store:rocksdb:13.0" path="rocksdb/data"> <expiration path="rocksdb/expired"/> </rocksdb-store> </persistence> </local-cache>
JSON
{ "local-cache": { "persistence": { "rocksdb-store": { "path": "rocksdb/data", "expiration": { "path": "rocksdb/expired" } } } } }
YAML
localCache: persistence: rocksdbStore: path: "rocksdb/data" expiration: path: "rocksdb/expired"
ConfigurationBuilder
Configuration cacheConfig = new ConfigurationBuilder().persistence() .addStore(RocksDBStoreConfigurationBuilder.class) .build(); EmbeddedCacheManager cacheManager = new DefaultCacheManager(cacheConfig); Cache<String, User> usersCache = cacheManager.getCache("usersCache"); usersCache.put("raytsang", new User(...));
带有属性的 ConfigurationBuilder
Properties props = new Properties(); props.put("database.max_background_compactions", "2"); props.put("data.write_buffer_size", "512MB"); Configuration cacheConfig = new ConfigurationBuilder().persistence() .addStore(RocksDBStoreConfigurationBuilder.class) .location("rocksdb/data") .expiredLocation("rocksdb/expired") .properties(props) .build();