我正在尝试将 Rocks DB 与 TTL 结合使用。我初始化rocks db的方式如下:
options.setCreateIfMissing(true)
.setWriteBufferSize(8 * SizeUnit.KB)
.setMaxWriteBufferNumber(3)
.setCompressionType(CompressionType.LZ4_COMPRESSION)
.setKeepLogFileNum(1);
db = TtlDB.open(options, this.dbpath, 10, false);
Run Code Online (Sandbox Code Playgroud)
我已将 TTL 设置为 10 秒。但是,10 秒后键值对不会被删除。这里发生了什么事?
这是设计使然:
当插入的键值要在非严格的“ttl”时间内从数据库中删除时,应使用此 API 打开数据库,因此,这保证插入的键值将至少保留在数据库中ttl 时间量,数据库将在插入 ttl 秒后尽快删除键值
——摘自TTL 上的RocksDB Wiki 页面。
这意味着仅在压缩期间删除值,并且在读取期间不检查陈旧性。
RocksDB 的优点之一是它们的源代码非常可读。您想要查看的文件是. TtlDb在标头中,您将找到删除陈旧值的压缩(压缩的合同在其标头Filter中有详细记录)。在您自己验证的源中,不会执行任何检查该值是否已过时。它只是删除时间戳(它只是附加到插入时的值)。TtlDbGet
| 归档时间: |
|
| 查看次数: |
5345 次 |
| 最近记录: |