首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rocks DB上正确设置TTL?

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

Stack Overflow用户
提问于 2018-12-10 13:05:37
回答 1查看 2.2K关注 0票数 1

我正在尝试将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);

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-12 08:08:07

这是经过设计的:

当插入的键值意味着要在非严格的“ttl”时间量内从数据库中移除时,应使用此API来打开数据库。因此,这保证了所插入的键值将在数据库中保留至少ttl时间量,并且数据库将努力在插入键值的ttl秒之后尽快移除键值。

--来自TTL上的RocksDB Wiki-page

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

关于RocksDB的好处之一是它们的源代码非常易读。您需要查看的文件是用于TtlDbheadersource。在标题中,您可以找到压缩,它删除了陈旧的值(压缩的Filter-contract在its header中有很好的说明)。在TtlDb源代码中,您自己验证Get不执行任何值是否过时的检查。它只是剥离时间戳(它只是在插入时附加到值上)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53699784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档