存储层一些可优化点 #127
AlexStocks
started this conversation in
General
存储层一些可优化点
#127
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
ref doc OpenAtomFoundation/pikiwidb#220
不管是之前的 blackwidow,还是现在新开发的 Floyd ,都存在不同数据类型的 key 重复问题,blackwidow 是使用的每种数据类型一个 rocksdb,Floyd 是不同的数据类型通过 Column-Family 进行隔离,具体的 Column-Family 种类如下图所示,依旧没能解决不同类型的 key 重复的问题。
Floyd 的 column family 设计
在 Floyd 现有的设计之上,再新增加一个 Column-Family,专门用于存放所有的 key,其对应的 value 为数据类型 type,并在内存中建立一个所有 key 的 cuckoo bloom filter 。在增加一个 key 时,先去读 cukoo bloom filter判断被增加的 key 是否存在,如果不存在,则直接进行后续的操作,如果存在,但可能是假阳性,所以需要一次读盘操作,去新增加的 Column-Family 中读取,验证被增加的 key 是否真正存在,然后再进行后续的操作。
改进后的 Floyd :直接将 meta 存在 string 中,使用 type 来区分所有类型。
cuckoo bloom filter:https://redis.io/docs/data-types/probabilistic/cuckoo-filter/
tendis:https://github.com/Tencent/Tendis/blob/97bf3255765c6a1a8e943222c07c9ec1a3fd860a/src/tendisplus/storage/record.cpp#L84
整理了一些社区同学们的想法
讨论的链接
望哥:record: +1字段,需要修改decode/encode的代码
查找:原来在对应的metacf查找,现在统一在一个metacf查找,然后根据flag选择第二个datacf
写入: 原来也要写两个cf,现在第一个是统一的,现原写入的代码是直接选cf id的,这些地方都要改一行代码就行。 string可以改成兼容这个写法,原来只需要写一个cf。
谦祥:如果能单独设置block cache,为这个CF单独设置一个,防止和别的数据公用,导致key的CF淘汰出内存
Beta Was this translation helpful? Give feedback.
All reactions