You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
RocksDB 支持了 key-value 分离的实现,即通过将大 value 存储到单独的 blob 文件中,只在 sst 文件中存储大 value 在 blob 文件的索引信息,从而减少写放大,有效提升大 value 场景下的写入性能。Pika 依赖自定义的 CompactionFilter 实现过期数据的处理,TTL 存储在 value 中,因此在 compaction 过程中不可避免导致额外的 blob 文件 IO。虽然官方的Compactionfilter中有FilterBlobByKey供用户实现,从而减少blob io,但pika的使用中ttl存储在value中,并不能根据key进行过滤。
Floyd 中规避这些额外 IO 的方式是修改 sst 文件中存储的 blobindex 的结构,在 BlobIndex 存储 value 的 ttl 值,数据写入 Blob 时,将 TTL 在 BlobIndex 中保留一份。同时,RocksDB 的 CompactionFilter 中本身提供了 FilterBlobByKey 这样的函数针对 blob 类型的 value 使用过滤,因此修改 FilterBlobByKey 函数接口,传入从 BlobIndex 中解析出的 TTL 字段,Pika 在实现自己的 CompactionFilter 时,重写 FilterBlobByKey 函数即可,根据传入的 TTL 即可判断 blob value是否需要删除,无需额外读取 blob文件。对于非 String 类型,在 FilterBlobByKey 函数中读取元信息,并根据元信息的 version和 TTL 判断数据是否需要保留,同样不会导致blob文件IO。
Beta Was this translation helpful? Give feedback.
All reactions