存储层一些可优化点 #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
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
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