前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用的数据检索结构

常用的数据检索结构

作者头像
用户4700054
发布2022-08-17 11:35:39
4890
发布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 条评论
热度
最新
推荐阅读
目录
  • 哈希表
    • B+树
      • LSM树
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档