我使用下面的代码使用Ehcache3设置持久缓存。
我想使用后写算法来尝试加速我的写入。但是,我没有找到代码示例或指南来执行此操作。官方ehcache文档缺乏 - 当我在他们的论坛上寻求帮助时,我收到的是“我们必须修复此文档!”我找到了许多如何使用不属于PersistentCacheManager类型的高速缓存的示例,这些高速缓存不适用于新的类类型。
有一些代码示例,最值得注意的是 ehcache write-behind behaviour 但我不确定使用哪种版本的Ehcache。
我有点卡在这里,在我看来,我不能成为第一个想写一个具有后写行为的持久存储的人。我发现“后写”的含义有些模糊。我想要做的是以块状模式而不是一次一个地写入磁盘。我希望这可以在替换现有数据时加快写入速度。
我可以想象,优化写入速度可能会导致HD上出现文件碎片等问题 - 文件中可能还有未使用的漏洞。我希望有预先构建的代码来解决这些问题。也许有这方面的选项,我可以使用额外的调整。
PersistentCacheManager myCacheManager;
myCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(this.filename))
.withCache("myCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(
Long.class, long[].class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(100000, EntryUnit.ENTRIES)
.offheap(1, MemoryUnit.GB)
.disk(2000, MemoryUnit.GB, true)
)
).build(true);
答案 0 :(得分:0)
正如mailing list上的回复 - 比您在此处指出的更广泛 - 后写和PersistentCacheManager
之间绝对没有关系。
CacheLoaderWriter
来支持直写,CacheManager
将实现与任何行为的交互作为参考数据存储(数据库,ReST服务,......)是的,正如承认的那样,可以在该主题上改进文档。 请注意,除了配置和实现的确切接口(结合Ehcache 2.x的读者和编写者)之外,高级文档化原则仍然有效。
所以要回到你对Ehcache发出的磁盘写入方式的困惑 - 这是一个实现细节,绝不会发生每个突变。请注意,Ehcache磁盘存储是不崩溃证明,如果未正确关闭 demo_one
----------------------------------------
id | name | position | phone
----------------------------------------
1 | Moby Dick | Whale | 1-403-651-4000
2 | Jaws | Shark | 1-403-651-4000
demo_two
---------------------------------------------------
id | name | type | cell
---------------------------------------------------
1 | Son of Moby Dick | Whale | 1-403-651-4000
2 | Son of Jaws | Shark | 1-403-651-4000
数据,将在重新启动时转储。这不是转换键值存储中的缓存的功能!绝对不是耐用性保证。