摘要:二叉查找树是一种查找效率非常高的数据结构,它有三个特点。二叉查找树的结构不适合数据库,因为它的查找效率与层数相关。树是对二叉查找树的改进。备份机制保存数据库的副本。
转载自:阮一峰的网络日志
所有应用软件之中,数据库可能是最复杂的。
MySQL的手册有3000多页,PostgreSQL的手册有2000多页,Oracle的手册更是比它们相加还要厚。
但是,自己写一个最简单的数据库,做起来并不难。Reddit上面有一个帖子,只用了几百个字,就把原理讲清楚了。下面是我根据这个帖子整理的内容。
数据以文本形式保存
要理解B树,必须从二叉查找树(Binary search tree)讲起。
二叉查找树是一种查找效率非常高的数据结构,它有三个特点。
1. 每个节点最多只有两个子树。 2. 左子树都为小于父节点的值,右子树都为大于父节点的值。 3. 在n个节点中找到目标值,一般只需要log(n)次比较。
二叉查找树的结构不适合数据库,因为它的查找效率与层数相关。越处在下层的数据,就需要越多次比较。极端情况下,n个数据需要n次比较才能找到目标值。对于数据库来说,每进入一层,就要从硬盘读取一次数据,这非常致命,因为硬盘的读取时间远远大于数据处理时间,数据库读取硬盘的次数越少越好。
B树是对二叉查找树的改进。它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。
B树的特点也有三个。
1. 一个节点可以容纳多个值。比如上图中,最多的一个节点容纳了4个值。 2. 除非数据已经填满,否则不会增加新的层。也就是说,B树追求"层"越少越好。 3. 子节点中的值,与父节点中的值,有严格的大小对应关系。一般来说,如果父节点有a个值,那么就有a+1个子节点。比如上图中,父节点有两个值(7和16),就对应三个子节点,第一个子节点都是小于7的值,最后一个子节点都是大于16的值,中间的子节点就是7和16之间的值。
这种数据结构,非常有利于减少读取硬盘的次数。假定一个节点可以容纳100(a)个值,那么3(n)层的B树最大可以容纳1030300((a+1)^(n-1)*a)个数据,如果换成二叉查找树,则需要20层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值,只需要读取两次硬盘。
索引
部署了最基本的数据存取(包括索引)以后,还可以实现一些高级功能。
(1)SQL语言是数据库通用操作语言,所以需要一个SQL解析器,将SQL命令解析为对应的ISAM操作。
(2)数据库连接(join)是指数据库的两张表通过"外键",建立连接关系。你需要对这种操作进行优化。
(3)数据库交易(transaction)是指批量进行一系列数据库操作,只要有一步不成功,整个操作都不成功。所以需要有一个"操作日志",以便失败时对操作进行回滚。
(4)备份机制:保存数据库的副本。
(5)远程操作:使得用户可以在不同的机器上,通过TCP/IP协议操作数据库。
(完)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/17449.html
摘要:千锋出品之天龙八部操作必须先开启扩展函数库首先先开启开启成功呢我就可以开始连接数据库了,第一步连接数据库服务器地址用户名,密码第二步判断连接数据库是否成功连接错误号连接错误信息第三步选择数据库数据库名称第四步设置字符集第五步准备语句表名第六 千锋PHP出品之天龙八部: Php操作mysql必须先开启mysq扩展函数库 首先先开启extension = mysqli_dll; ...
摘要:说明算法运行结束后,会得到从源节点到其它所有节点的最短路径,同时得到每个节点的前驱节点,不能包含负权回路如图但可以包含图,这里所说的负权环路是指环路的权值总和为正或为负图图松弛操作概念松弛操作针对的操作对象是图中的边,对图中任意一条边, 1. 说明 Bellman-Ford算法运行结束后,会得到从源节点 s 到其它所有节点的最短路径,同时得到每个节点的前驱节点,Bellman-Ford...
阅读 4334·2021-11-22 09:34
阅读 2657·2021-11-12 10:36
阅读 719·2021-08-18 10:23
阅读 2621·2019-08-30 15:55
阅读 3090·2019-08-30 15:53
阅读 2062·2019-08-30 15:44
阅读 1275·2019-08-29 15:37
阅读 1284·2019-08-29 13:04