生存时间

可以使用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

在头文件中定义

  1. static Status DBWithTTL::Open(const Options& options, const std::string& name, StackableDB** dbptr,
  2. int32_t ttl = 0, bool read_only = false);