B+树层数计算(面试官直呼内行)

简介: 首先搞清楚一个常识,我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是 4k

B+树结构简述

跟其它tree结构一样,根节点只有一个,根节点可以为叶子节点或者非叶子节点,B+树的非叶子节点(包括根节点)可以有多个子节点,它的非叶子节点仅保存索引列和指针,不保存具体行记录;

啥是根节点

最上面那个就叫根节点

啥是非叶子节点

不是叶子节点的节点都叫非叶子节点


啥是叶子节点

最下面那些最终节点就叫叶子节点


如何计算层数

首先搞清楚一个常识,我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛


在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是 4k


而对于我们的 InnoDB 存储引擎也有自己的最小储存单元——页(Page),一个页的默认大小是 16K,page可以储存指针,也可以储存行记录,其中指针指向下一个page的地址


好,知道这个,计算层数就简单了,我们先假设有两层,第一层为非叶子节点,保存指针,第二层为叶子节点,保存具体行记录


那么两层高度的b+树能存储的数量 = 根节点指针数*每个指针对应第二层的行记录数


ok建议你先捋捋,不着急


根节点指针数

怕你没认真看上面,我再说一遍,B+树的非叶子节点仅保存索引字段和指针,假设主键为bigint类型,InnoDB 的bigint占用8个字节,指针占用6个字节,8+6=14,所以我们可以得出,一个page能存放的指针个数为16k/(8+6)约等于1170


每个指针对应第二层的行记录数

再来说说一个page能存储多少条行记录,常规的互联网项目单条行记录大小约为1k,那么一个page能存储的行记录数为16k/1k=16


所以一个2层高的b+树能存储的行记录数大约为1170*16=18720

3层为1170*1170*16约等于2190w


ok我话说完


相关文章
|
JavaScript 前端开发
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
JavaScript
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。(二)
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
JavaScript 前端开发
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。(一)
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
|
存储 机器学习/深度学习 缓存
为什么要用HashMap?这样回答面试官直呼内行【手撕HashMap系列】
为什么要用HashMap?这样回答面试官直呼内行【手撕HashMap系列】
294 0
为什么要用HashMap?这样回答面试官直呼内行【手撕HashMap系列】
|
存储 缓存 运维
JVM面试题,面试官直呼内行!!!
这篇文章给大家分享一下Java中的核心技术JVM。作为一个Java程序员,相比或多或少的都会接触到一些关于Java底层的知识,这些底层知识是非常重要的,相比之下这些知识也是比较难以理解的
|
存储 算法 安全
手写HashMap,快手面试官直呼内行
快手一面,手写HashMap,卒……
261 0
手写HashMap,快手面试官直呼内行
|
SQL NoSQL Java
分布式锁实现思路(面试官直呼内行)
目前java中的synchronized或者juc包中的锁都是针对单个jvm的,分布式环境下就无能为力,只能用分布式锁;
143 0
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
9天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
11天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
35 4