tokyotyrant的内部实现特征

修改一个value值的时候,当新数据大于老数据,如果后面有空间,就增大,没有就移动。

有两种收拾碎片的方法,一是把数据重新导一份,名曰静态碎片整理,这个是手动调接口执行的。二是动态收集碎片,再重新整合,这个过程是在一些常规操作中被触发进行的。

B+树存储的父子结点间是双链。

B+树存储的每一个叶结点是一个hash表,每一个叶结点叫一个page。

B+树的索引是存在内存中的,每次insert可能会导致比较多的结点重组。

B+树的每一个page都可以选择进行压缩,采用的是Deflate of ZLIB及Block Sorting of BZIP2.压缩率可达75%,压缩后数据仅为原始数据的25%大小。如果磁盘IO成为系统瓶颈的话,采用压缩会有显著效果。

Fixed-length存储引擎是全部mmap到内存中的,它不保存key值,所以如果数据过大,就会用到虚拟内存。

table存储引擎功能强大,他就像是有一个索引,然后分别索引向多列数据。他的每一列数据支持字符匹配,支持正则匹配,对数字类型的列支持范围查询和字符匹配,同时tag查询及全文检索也是支持的。它还支持按列的排序,实际就是指定目标列的升序和降序。

free block pool这块区域在bucket区域后面,他每一个元素指向一块空间空洞,包括了空洞的位置和尺寸信息。

TT的command mask以逗号隔开,command mask和unmask的起作用的优先级视参数顺序而定。

-mul是一种内置的skel方式,主要方式是先构造一个skel项,再调用常规的skel挂载方式挂载运行。

tc在tcadbopen的时候,首先是检测有没有相应的skel挂载项,如果有,就调用skel->open,其它方法类似,以此来实现自定制存储。

tc的数据元素cache,是在调用get的时候做的,从磁盘读到数据后做缓存,比较了rcnum与当前num的大小,如果满了的话就调用调整函数调整缓存腾出空间。其实所谓的调整也就是切掉头部。

切掉头部也不简单,cache层用的是TCMAP存储,每一个tc上有多个TCMAP(8个),每次额定是切掉128个元素,把这128个平摊到各个TCMAP里面可能每一个TCMAP就切掉几个(16个),这几个的切掉是用的迭代,一个一个的迭代然后删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值