如何在Rocks DB上正确设置TTL?

时间:2018-12-10 05:05:37

标签: ttl rocksdb

我正在尝试将Rocks DB与TTL一起使用。我初始化rock db的方式如下: options.setCreateIfMissing(true).setWriteBufferSize(8 * SizeUnit.KB) .setMaxWriteBufferNumber(3) .setCompressionType(CompressionType.LZ4_COMPRESSION).setKeepLogFileNum(1); db = TtlDB.open(options, this.dbpath, 10, false);

我已将TTL设置为10秒。但是,键值对不会在10秒后删除。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

那是设计使然:

  

当要在非严格的“ ttl”时间内从数据库中删除插入的键值时,应使用此API打开数据库,从而保证插入的键值将保留在数据库中在至少ttl的时间内,数据库将努力在插入ttl秒后尽快删除键值

-来自TTL上的RocksDB Wiki-page

这意味着仅在压缩期间删除值,并且在读取期间不检查陈旧性。

RocksDB的优点之一是其源代码易于阅读。您要查看的文件是TtlDb的{​​{3}}和header。在标题中,您会找到消除陈旧值的压缩(压缩的Filter合同在source中有很好的记录)。在TtlDb源中,您自己验证Get不会进行任何检查值是否陈旧。它只是剥离时间戳(时间戳会被附加到插入值上)。