已经有了二叉搜索树以及他发展的红黑树和AVL数为什么还要优化出B树呢,我们知道红黑树的搜锁时间复杂度大约是AVL树的两倍左右,这点时间对于cpu来说无伤大雅,所以当红黑树储存10亿个数据以后她大概需要30次左右可以找到,这如果在内存中一下子就找到了,但是我们很多时候数据都是存在磁盘上的.这时找30次可就慢了.
计算机读取数据时从寄存器拿数据是最快的,然后是三级缓存,内存,再是磁盘,然后是云服务器上,他们越快成本越高空间就越小.所以一般个人计算机很多时候数据都是放在磁盘上,然而红黑树从磁盘拿数据就比较慢,因为需要30次不断进入磁盘拿数据,所以为了读取磁盘的次数少一点,就发明改进了平衡搜索树,于是有了B树,B树的高度更低.访问磁盘次数就更少.
B树又称多叉平衡搜索树.他不想二叉树那样每个节点最多有两个子节点,他可以有两个以上的子节点,所以他的搜索时间复杂度是log以度为底数据量为真数的对数函数的结果.
他有以下几条规则:
1:根节点至少有两个以上孩子.
2:每个非根结点有[m/2-1.m-1]个关键字(这里的除法都是向上取整).并有[m/2,m]个孩子.
3:根节点有[1,m-1]个关键字,[2,m]个孩子.
4:每个节点的关键字都是按升序排列.
5:所有的叶子节点都在同一层.
B树的只要构建方式是分裂,首先有一个根节点,不断往根节点中插入数据,一旦这个根节点满了就分裂出去一般的数据,存入另一个开好的空间.然后将分裂之前的关键字的中位数作为分裂的两个兄弟节点的双亲结点.以后所有的分裂都是这样的形式.如图:
B树的分裂过程就是如此,总是向上分裂者向兄弟节点分裂,当根节点满了以后就造出一个新的根节点.B树的删除也是这样的一个逆向的过程,不过为了减少效率浪费,当一个节点删控了以后就会向双亲节点借数据,直到借不到了才会合并.可以看到B树有着很重的二叉树的影子,这样遍历起来很麻烦,于是就有人对B树也进行了优化,于是有了b+树.
B+书中规定一个节点的关键字数量与孩子节点数量相等,并且所有的数据都应该出现在叶子节点上,并且叶子节点用链表的形式连起来.,一是她很方便遍历,只需要迭代叶子节点就可以访问所有的数据.而是规则不是那么的复杂.而后又因为B+树在某些情况下空间利用率不是很高就有了b*树,b*树的优点是空间利用率高,并且非叶子节点也连接起来了.
无论是B树还是B树的变形他都是为了储存数据方便查找而存在的,说道存储数据,就要说道常用的数据库了.
常用的数据库有:Mysql,sqlsever,sqlite,oracle,其中MYSQL,sqlsever,oracle是cs模型,sqlite是bs模型.,而在平时我们自己写的c++程序需要安装c 的api的静态库或者动态库来使用这些数据库.
比如我们用c语言去建立一个表.系统会自己生成一个底层是B树的一个表.这个表有很多功能,其中重要的是查找,他可以根据不同的键值查找,在学二叉树的时候就了解到一课搜索树,只有一个键值,根据这个键值可以很快的找到目标元素,但是数据库中可以根据不同的键值找目标数据,如果是非主键查找,就是B树的叶子节点遍历了,这样很慢,于是又有了另一种方法,根据另一个键值构造一颗新的B树,这样非主键值也能有很快的查找速率..因此可以得知庞大的数据量储存在物理内存中,而B树的每个节点中只存储数据的指针,最后找到叶子节点中的指针解引用得到一系列结构体的数据.
mysql的旧版本中默认myisam存储模式,他只支持文本的存储和查找而新版本的默认使用innodb模式,它不仅支持文本存储也支持事物存储,他支持b+树索引,全文索引和哈西索引,他的存储方式也不同,上面说道b+树中叶子节点存放一个指针这个指针指向内存中的一块空间,空间中放着一系列数据,而innodb模式下b树中的叶子节点直接存储数据而不是一个指针.
上面说新版mysql支持存储事物,什么是事物呢?
之前在多线程操作时会有变量自增语句存在线程安全问题,因为变量自增不是一个原子指令,他是分开着的所以会被多个线程同时访问导致错乱,而事物也是如此,他可能是几个语句的合体,比如账户a给账户b转100元,首先是账户a减少一百元,然后是账户b增加一百元,这是两个事情,若是其中一个执行失败,另一个执行成功就出大问题了,所以将它们两件事情一起执行,一旦有其中一个出错就回滚再次执行直到完成为止.这就是一个事务.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人