建网站的流程费用,如何搭建静态网站源码,wordpress安装是失败,企业网上核名B-树和B树的区别
一、B-tree数据存储
在下图中 P 代表的是指针#xff0c;指向的是下一个磁盘块。在第一个节点中的 16、24 就是代表我们的 key 值是什么。date 就是这个 key 值对应的这一行记录是什么。 假设寻找 key 为 33 的这条记录#xff0c;33 在 16 和 34 中间树的区别
一、B-tree数据存储
在下图中 P 代表的是指针指向的是下一个磁盘块。在第一个节点中的 16、24 就是代表我们的 key 值是什么。date 就是这个 key 值对应的这一行记录是什么。 假设寻找 key 为 33 的这条记录33 在 16 和 34 中间所以会去磁盘 3 进行寻找。
在磁盘 3 中进行判断指针指向磁盘 8。在磁盘 8 中即可获取到数据 33然后将 data 返回。
一般说到的页都是数据页。默认的页面大小为16kb每个页中至少存储2条或以上的行记录。那么根据 BTree 数据查找的过程中可以得知一共读取了三个磁盘那么每个磁盘的大小就是 16kb。
而目前的给的案例寻找了三层那么三层存储的数据就是16kb16kb16kb4096kb 如果按照一条记录所需内存 1kb那么这三层的 BTree 就可以存储 4096 条记录
数据库的数据少则几百万多则几千万数据那么 BTree 的层级就会越来越深相对的查询效率也会越来越慢。
这里就要考虑为什么在 Btree 中 48kb 的内存怎么就只能存储 4000 多条记录
问题就出现在 data 上要知道在计算数据大小时指针地址和 key 的内存都是没有计算在内的单单就计算了 data 的内存。
问题就出现在 data 上要知道在计算数据大小时指针地址和 key 的内存都是没有计算在内的单单就计算了 data 的内存。
二、BTree数据结构实现过程 对比B树的数据存储结构可以看到
1. 对比B树的数据存储结构可以看到 BTree 所有的叶子节点之间是一种链式环结构。 2. B树非叶子节点不存储data数据只存储主键数据以及相关指针数据。
那么在这个过程中到底读取了多少条数据呢
假设BTree 读取数据的深度跟 B-Tree 的深度一样都是三层那么同样的道理每个磁盘的大小为 16kb。
那在 BTree 中非叶子节点可以存储多少数据呢一般来说我们每个表都会存在一个主键。
根据三层来计算第一层跟第二层存储的是 key 值也就是主键值。
由于 int 类型所占的内存是 4Byte字节指针的存储就给个 6Byte一共就是 10Tybe那么第一层节点就可以存储 161000/101600。
同理第二层每个节点也是可以存储 1600 个 key。
第三层是叶子节点每个磁盘存储大小同样安装 BTree 的计算一样每条数据占 1kb。
那么在 BTree 中三层可以存储的数据就是 160016001640960000 足以见得BTree四层时已经是40960000 * 1600 条数据足以见得已经能够满足绝大部分数据存储需求
可见 1.B树索引结构InnoDB引擎三次磁盘IO只能查到4096条数据而B树索引结构三次磁盘IO能够查到40960000.相差万倍 2.innodb对磁盘默认一次读取16KB字节大小Linux系统默认读取4KB字节大小。故InnoDB在说IO磁盘操作时是Linux系统磁盘操作次数的四倍。