用户4700054
常用的数据检索结构
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
用户4700054
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
常用的数据检索结构
常用的数据检索结构
用户4700054
关注
发布于 2022-08-17 11:35:39
489
0
发布于 2022-08-17 11:35:39
举报
文章被收录于专栏:
存储内核技术交流
哈希表
哈希表支持增、删、改、查操作,但是支持范围查找较差;因为哈希表特性,如果进行范围查找,一个范围的所有数据都必须经过哈希计算来查找对应的链表节点,这几乎是需要这个范围每一个数据都需要去哈希表中查找一次,性能比较差。
B+树
B+树支持增、删、改、查操作,并且很好支持范围查找,插入和查找性能均衡。
B+树的结构每个非叶子节点是数据索引,叶子节点是数据或者数据的指针。B+树叶子节点之间的连接可以实现高效的范围查询,例如innoDB存储引擎默认就是B+树结构.
传统的B+树读写相对比较均衡,但是当内存容量小于数据集时候,大量随机写会使得插入和更新操作变得很慢。采用随机写是因为在B+树中,写操作是原地更新数据。比如修改B+树中某个叶子节点的数据,基本分为两步,第一是查找叶子节点数据,第二是原地更新这个值。这样的操作基本对于磁盘都是随机写,不能充分利用好磁盘
LSM树
LSM树支持增、删、改、查操作以及范围查找操作,插入操作非常快,但是查找性能一般
LSM树通过避免随机写入问题,将随机写转换为顺序写,大大提高了写性能。LSM树和B+树比起来牺牲了部分读性能,来提高写性能。自身的读性能可以通过一定的方式来提供。
LSM树基本设计思想是把多个磁盘随机写合并为顺序写,它会把LSM树中节点更改记录到新的磁盘上,而不是直接修改LSM树中节点的值。比如B+树需要修改10个离散的节点的值,B+树首先找到这10个值的所在磁盘位置,然后更改每个节点的值,这就产生了一个磁盘的随机写,这样反复10次,代价比较大。LSM树则是把10个离散的节点新值顺序写入到磁盘的新位置,所以进行了一次的顺序写,因此LSM树的写性能显著优于B+树。
LSM树每次更新或者插入,数据都写入到磁盘的新位置,写操作完成,这样不仅造成磁盘的空间冗余,也会降低性能。在LSM树的相关论文中给的一种实现方式,它把一棵树分割为多层,每一层都是B+树,并且越下面的层包括的树越大。
如上图内存中C0保存了新写入的数据,余下的C1~C{N}都存储在磁盘上。C0的B+树是存储在内存里而不是磁盘中。所以直接操作C0的B+树代价都很小。为了防止C0操作中内存掉电会引起数据丢失的问题,当收到数据写请求,此次写请求会记录WAL日志,然后再次写入到C0中,及时内存掉电也可以从WAL中恢复C0的数据。
当C{N}中B+树越来越大后,会把C{N}的部分叶子节点合并到C{N+1}中,这个过程就是何必并。为什么需要合并呢?因为随着小的B+树越来越多,每次读操作需要查询更多的树,这会导致读性能越来越差,因此需要在适当时候对磁盘上的小树进行合并,将多个小的B+树合并为一个大的B+树,通过合并还可以删除旧版本的数据,释放空间。比如leveldb合并和这个类似,不同的每一层的在磁盘上的实现是有些不同的,leveldb的合并具体参见下图
本文参与
腾讯云自媒体同步曝光计划
,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系
cloudcommunity@tencent.com
删除
编程算法
存储
本文分享自
存储内核技术交流
微信公众号,
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体同步曝光计划
,欢迎热爱写作的你一起参与!
编程算法
存储
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
目录
哈希表
B+树
LSM树
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
产品介绍
产品文档
COS新用户1元购,加赠10元代金券;新用户99元购,加赠100元代金券
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐