对于OLTP型数据库梳理

从数据库底层来看,数据库到目前为止,有这几种数据结构

1.b树,b+树,(mysql,PostgreSQL)

2.lsm树(LevelDB,RocksDB,TIDB,CockroachDB)

3.基于B+树和LSM树改良的树,比如Fractal树(TokuDB)

 

下面一一介绍每种树的典型应用

B树,B+树

传统的关系型数据将数据以B树的形式存储在磁盘上,它们也会在RAM上使用B树维护这些数据的索引,来保证更快的访问速度。插入的行存储在B树的叶子节点上,所有的中间节点用来存储用于导航查询语句的原数据。因此,当有数以百万计的数据被插入到数据库中时,索引和数据存储会变得十分大。因此,为了快速的访问,需要从磁盘中加载所有数据到内存,但是RAM一般没有这么大的空间来存储所有的数据。因此,数据库必须从磁盘中读取部分数据。这种加载数据的场景如下图所示:

b+树

图片引自https://segmentfault.com/a/1190000015892186​​​​

B树和B+树区别在于B树的内部节点有指向关键字具体信息的指针,而b+树没有,因此b+树相对b树,有如下优点

磁盘读写代价更低

B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

B+树的查询效率更加稳定

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

 

InnoDB

mysql的InnoDB是大家工作中最常用的数据库存储引擎,B+树,聚簇索引,行级锁。聚簇索引数据的物理存放与索引都是有序的,它把所有的卫星数据都存储在叶节点中,内部节点只存放关键字和孩子指针。

 

图片引自https://blog.csdn.net/u010842515/article/details/68929687

InnoDB的所有辅助索引都引用主键作为data域。InnoDB 不会压缩索引,所以,如果主键定义的比较大,其他索引也将很大。如果想在表上定义很多索引,则争取尽量把主键定义得小一些。辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

图片引自

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值