赞
踩
首先Hbase的一个优点写速度快,就是因为用了这个LSM树
主要就是说 b树这种虽然查的快,但是在存的时候他是随机IO存储,这导致磁盘的磁臂会来回寻道存储,浪费大量时间。而LSM树它采用的是一种先把东西放内存这个是c0树,还有一个c1树用来存储合并结果的,他也放在磁盘里面(但他并不是最终的一个持久化结果),然后我每次c0存个差不多的时候, 我采用了一种追加合并的方式 合并到c1里面,批量存到磁盘里面。等我c1差不多大的时候,我直接持久化到最终磁盘里面形成hfile。
merge操作是为了一口气放更多的东西,其实还是一个批量存储的目的
由于我c0 c1都是有序的结构 最终存进磁盘里面也是有序的,所以我未来hfile合并直接归并查找,我读的时候也能用二分查找的方式,包括最后我读用了最小堆,它只需要查找到rowkey的一个起始行即可,就是因为我在写的时候,大家都是有序的
也就是,我开辟空间暂时存储我的东西,如果我的基础结构是那种有序结构,我还能在写的时候直接排序了。 等到我存了个差不多我就能批量持久化了,这种一堆文件的存肯定是顺序IO
相反的,会导致读的性能慢,因为我内存里面有东西,磁盘里面有东西,我要查看磁盘里面所有文件和内存的文件。
两边的东西我只是追加的形式插入数据,并不是修改的形式。(这句话就是 删除只是插入一条keytype为delete的row,并不是把数据真正删除)所以我俩边都要考虑,都要混合,不能像b树那种我看到是啥就是啥(b树删除更新就比较麻烦,而我们没有“删除更新” 全是“插入”)。
增强读性能的话 比如磁盘的文件会适时的合并 减少数量
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。