面试官问我为啥B+树一般都不超过3层?3层B+树能存多少数据?redo log与binlog的两阶段提交?

这篇具有很好参考价值的文章主要介绍了面试官问我为啥B+树一般都不超过3层?3层B+树能存多少数据?redo log与binlog的两阶段提交?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我今天逛了一下CSDN,又发现了一条显眼的数据,大概是说3层B+树足以容纳2000w条数据。我当时就蒙了,3层对2000w,心想这B+树也太厉害了吧,由此勾起了我求知的欲望,我一定要搞明白他这2000w是怎么来的。

重中之重

MySQL的执行流程如下图

b+树为什么三层,数据库,mysql,数据库,面试,b树

在两阶段提交的情况下,是怎么实现崩溃恢复的?

前提:binlog本身不具备crash-safe能力,所以InnoDB考虑到这一点,自己实现了redo log来具备这个能力。

关键点:在写入redo log和binlog时,都会顺便记录当前事务ID

会有如下三种崩溃情况:

1、在写redo log之前崩溃,那么此时redo log和binlog都没有这个ID,是一致的情况,崩溃也没事。

2、在写redo log 的prepare阶段后崩溃,此时redo log有这个ID,会根据ID去binlog查找这个ID,这个时候肯定是没有的,那么就会执行回滚操作。

3、在写binlog后崩溃,那么此时在redo log和binlog都存在这个ID,只是在redo log里的标记是prepare,所以这个时候直接commit就行。

也就是说,在崩溃恢复时,只要redo log不是处于commit阶段,那么就拿着redo log中的这个事务ID去binlog中查找,找得到就提交,找不到就回滚。这样就能确保redo log与binlog的数据一致性。

 文章来源地址https://www.toymoban.com/news/detail-671708.html

SQL语句的执行顺序如下图

b+树为什么三层,数据库,mysql,数据库,面试,b树

 

B+树结构

关于B+树的结构,我在之前的文章有讲过,在这里就不细说了,简而言之,B+树的分支非常多,而且每个非叶子节点只存主键值(主键索引)和指针,数据存在于叶子节点

也就是说,磁盘的IO次数与树的高度是相同的。

3层B+树可以存多少数据?

进入正题,前面说了,3层B+树大概可以存2000w条数据,这个是咋算出来的呢?

在Innodb存储引擎里面,咱们最小存储单元是页,而一个页的大小默认是16KB。

也即代表B+树的每个节点可以存16KB数据,这里我们假设我们的一行数据大小是1K,那么我们一个节点就可以存16行数据。注意:我们真正的数据都是存在叶子节点的,所以这里是指叶子节点可以存放16行数据。

我们前面也说了,非叶子节点存放的是主键值与指针,所以这里假设主键类型为bigint,占用8Byte,指针可以设置为占用6Byte,总共就为14Byte,这样就可以算出一个节点大概可以存放多少个指针了(指针指向下一层节点),大概为16KB/14Byte=1170个

由此,可以推算出,2层B+树的话,可以存放1170*16=18720行数据。3层B+树的话,可以存放1170*1170*16=21902400行数据,也就差不多2000w条数据了。

附加题

为啥不用B树?

因为B树的节点(无论是叶子节点还是非叶子节点),都会保存数据,所以相当于B+树的话,B树的非叶子节点能保存的指针就变少了,保存同等数据量的情况下,B树指针变少了就只能增加树的高度了,就会导致磁盘IO次数变多,从而影响性能

 

 

 

 

 

到了这里,关于面试官问我为啥B+树一般都不超过3层?3层B+树能存多少数据?redo log与binlog的两阶段提交?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 串口传输 为什么一般都不使用多线程?

    主要是两个原因: 1、串口的通讯速率相对电脑来说是很慢的(最高110K,以太网都千兆了)。正常情况下, 在等待下一个串口 信号 的间隙 ,操作系统已经完成了 时间片轮转 。多以不需要多线程。 “ 波特率115200 = 115200 (位/秒)。 如果没有校验位,就应该除以 10,得到的是每秒

    2023年04月14日
    浏览(55)
  • 一个资深测试工程师面试一来就问我这些题目

    德玛作为一个已经工作有10年经验的测试工程师,其间也辗转了几个大的互联网公司,虽然确实缺少了一些稳定性,但同时也积累了一些面试的经验,不才分享一些给大家。那么主要是针对测试工程师的一些总结,对于其他的工种,我可能会在别的文章中去总结一些面试技巧

    2024年02月09日
    浏览(50)
  • 【面试】面试官问的几率较大的网络安全面试题

    攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。 用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用参数构造的方式,就会出现 select * from user where name = ‘lianggzone’ and password = ‘’ or

    2024年02月01日
    浏览(52)
  • 面试官问:kafka为什么如此之快?

    天下武功,唯快不破。同样的,kafka在消息队列领域,也是非常快的,这里的块指的是kafka在单位时间搬运的数据量大小,也就是吞吐量,下图是搬运网上的一个性能测试结果,在同步发送场景下,单机Kafka的吞吐量高达17.3w/s,不愧是高吞吐量消息中间件的行业老大。 那究竟

    2024年02月07日
    浏览(45)
  • 造轮子系列】面试官问:你能手写Vuex吗(一)?

    前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库  web前端面试题库 VS java后端面试题库大全 Vuex 是 Vue.js 的状态管理模式,它主要解决了组件之间共享状态时的问题。在本文中,我们将实现一个简单的状态管理器,来帮助我们更好地理解 Vuex 的实现原理

    2024年02月03日
    浏览(42)
  • 面试官问 : ArrayList 不是线程安全的,为什么 ?(看完这篇,以后反问面试官)

    金三银四 ? 也许,但是。 近日,又收到金三银四一线作战小队成员反馈的战况 : 我不管你从哪里看的面经,但是我不允许你看到我这篇文章之后,还不清楚这个面试问题。 本篇内容预告:   ArrayList 是线程不安全的, 为什么 ? ① 结合代码去探一探所谓的不安全  ② 我们

    2024年02月02日
    浏览(60)
  • 【137期】面试官问:RocketMQ 与 Kafka 对比,谈谈两者的差异?(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新Java开发全套学习资料》,

    2024年04月27日
    浏览(34)
  • 面试题:为啥索引可以让查询变快?

    人类存储信息的发展历程大致经历如下: 由于是个人凭着自己理解总结的,因此可能不一定精确,但是毋庸置疑的是,在当代,各大公司机构部门的数据都是维护在数据库当中的。数据库作为数据存储介质发展的最新产物,必然是具有许多优点的,其中一个很大的优点就是存

    2024年02月02日
    浏览(36)
  • 离谱!面试为啥都问Kafka?赶紧补一下

    大家好,我是哪吒。 Kafka几乎是当今时代背景下数据管道的首选,无论你是做后端开发、还是大数据开发,对它可能都不陌生。开源软件Kafka的应用越来越广泛。 面对Kafka的普及和学习热潮,哪吒想分享一下自己多年的开发经验,带领读者比较轻松地掌握Kafka的相关知识。 🏆

    2024年02月08日
    浏览(38)
  • 面试官:MySQL 存储数据过多,为啥会变慢?

    面试官:MySQL 存储数据过多,为啥会变慢? 面试官:MySQL 存储数据过多,为啥会变慢? 目前大部分数据库系统及文件系统都采用BTree或其变种B+Tree作为索引结构,mysql 快与慢与索引结构有较大关系。 B 树也叫 B- 树。B+树与B树,这两种数据结构既有相似之处,也有他们的区别。 所

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包