生存时间
可以使用Time to Live(TTL)支持打开Rocksdb
用例
应该使用这个API打开db kv插入时要从db在的非严格的ttl的时间因此, 这可以保证kv插入仍将至少在db ttl的时间和db将努力尽快移除kv ttl秒后插入。
行为
- TTL以秒为单位接受
- (int32_t)时间戳(创建)后缀为Put内部的值
- 仅在压缩中删除过期的TTL值:(时间戳 + TTL)
- Get/Iterator可能返回过期的条目(还没有在它们上运行压缩)
- 不同的TTL可以在不同的开启状态下使用
- 例如:在t=0时打开1,ttl=4,然后插入k1,k2,在t=2时关闭2,在t=3时打开2,ttl=5。现在k1 k2应该在t>=5时被消去
- read_only=true以通常的只读模式打开。不会触发压缩(手动或自动),因此不会删除过期条目
约束
不指定/传递 或 非正TTL的行为类似于 TTL = infinity
!!!警告!!!
- 直接调用DB::Open来重新打开这个API创建的DB将会得到损坏的值(时间戳后缀),并且在第二次打开时不会有ttl效果,所以始终使用这个API来打开DB
- 传递带小正值的ttl时要小心,因为整个数据库可能在短时间内被删除
API
在头文件中定义
static Status DBWithTTL::Open(const Options& options, const std::string& name, StackableDB** dbptr,
int32_t ttl = 0, bool read_only = false);