BTreeHash数据库存储引擎技术的优劣势分析.docx
《BTreeHash数据库存储引擎技术的优劣势分析.docx》由会员分享,可在线阅读,更多相关《BTreeHash数据库存储引擎技术的优劣势分析.docx(10页珍藏版)》请在第一文库网上搜索。
1、B-Tree.HaSh等数据库存储引擎技术的优劣势分析【摘要】很多数据库管理员可能对存储引擎并不熟悉,但接触MySQ1以及其他一些NOSQ1分布式数据库比较多的人可能对存储引擎就会深有感受。不同的存储引擎对数据的结构、数据的存储方式、数据的读取方式等都有不同的要求和特点。存储引擎的基本思想是决定具体数据库产品的适用场景的最根本原因,本文希望通过这些原理性的讨论和分析展示给大家有一个宏观的视图,从而指导具体的数据库设计实践。【作者】赵海1 .什么是数据库的存储引擎技术数据库的存储引擎是什么?它主要解决什么问题?很多数据库管理员可能对存储引擎并不熟悉,因为大多数常见关系型数据库基本只有一种存储引擎
2、,没有给我们选择和设计的机会,例如OraC1e、SQ1Servero但是如果我们接触MySQ1以及其他一些NOSQ1分布式数据库比较多的人可能对存储引擎就会深有感受。首先,我们认为存储引擎就是为了实现数据存储以及数据检索而实现的解决方案,如何建立索引,如果实现更新,如何检索数据等都是它的功能实现范畴。常见的存储引擎有哈希存储引擎和树存储引擎,树存储引擎又分为B-Tree、B+Tree,1SM-Tree等若干种。不同的存储引擎对数据的结构、数据的存储方式、数据的读取方式等都有不同的要求和特点。2 .不同存储引擎如何建立索引2.1 B-TreeB树数据结构其实是在我们大学当中所学数据结构课程当中的
3、二叉树基础上的一种升级和改进。最早是由德国计算机科学家RUdo1fBayer等人于1972年在论文OrganizationandMaintenanceof1argeOrderedIndexes提出。如图所示,B树事实上是一种平衡的多叉查找树,也就是说最多可以开m个叉(m=2),我们称之为m阶b树。总的来说,IT1阶B树满足以下条件:(1)每个节点至多可以拥有m棵子树。(2)根节点,只有至少有2个节点(极端情况,就是一棵树就一个根节点)。(3)非根非叶的节点至少有Cei1(m2)个子树(图中5阶B树,每个节点至少有3个子树)。(4)非叶节点中信息包括n,AO,K1,Kn,An,其中n表示该节点保
4、存的关键字个数,K为关键字且Ki(对应到关系型数据库当中的信息,就是二位表当中记录的主键信息)。(5)从根到叶子的每一条路径都有相同的长度,也就是指向这些节点的指针为空。2. 2B+TreeB+树实际上是Brree的升级版,它是基于原有数据结构的不足支持进行系列改造之后形成的存储引擎技术,如图所示:从图中所示的状况我们可以很直观感受到:B+树与B树最大的不同是所有数据记录都保存在叶子节点中,叶子结点是有指针将所有数据连接起来的。具体来说,B+树与B树的主要区别:(1)有n棵子树的节点含有n个关键字(也有认为是n-1个关键字);(2)所有的叶子节点包含了全部的关键字,及指向含这些关键字记录的指针
5、,且叶子节点本身根据关键字自小而大顺序连接;(3)非叶子节点可以看成索引部分,节点中仅含有其子树中的最大或最小关键字.由于采用了这样的结构,B+树对比B树有以下两方面优点:首先,索引节点上由于只有索引而没有数据,所以索引节点上能存储比B树更多的索引,这样树的高度就会更矮。那么查询的时间复杂度就会更低。再有,因为数据都集中在叶子节点了并且叶子节点增加前后指针,指向同一个父节点的相邻兄弟节点,给范围查询提供遍历。而如果使用B树结构,由于数据既可以存储在内部节点也可以存储在叶子节点,范围查询是很繁琐的。3. 3Hash哈希存储引擎的数据库本身只是一个健值存储系统,数据库当中存储的数据以文件的物理形式
6、表现,但是每一个物理文件当中存储的具体数据内容主要包含两种:一种是主健,另夕I、一种是具体的数据值。用户通过PUt(key,va1ue)来写入数据,或者通过get(key)接口来获取数据,每条记录都是一个健值对。哈希索引本身有很多种实现方式,有基于静态哈希实现的索引结构,也有基于动态哈希实现的索引结构,其具体的实现方式依赖于不同的数据库。一般来讲,哈希索引表的结构如图所示:PK1一Fi1e-ID1Va1ue-1enth1Va1ue-Position1Time-Stamp1PK2一Fi1e-ID2Va1ue-1enth2Va1ue-Position2Time-Stamp2PK3一Fi1e-ID3
7、Va1ue-1enthSVa1ue-PositionSTime-Stamp3PKnfFi1e-ID4Va1ue-1enth4Va1ue-Position4Time-Stamp4我们知道HaShMap,可以通过K来获取V,对于以上的哈希索引来说,PrinIaryKey就是我们要取得的V值。比如(PK=keymod2)叫做散列函数或者哈希函数,那么PK的区间范围,我们称其为散列地址。存储的时候通过散列函数算出散列地址,然后把VaIUe的值存入,查找的时候通过散列函数算出散列地址,然后读出数据。4. 不同存储引擎的数据检索4.1 B-Tree&B+Tree对于基于二叉树数据结构基础之上形成的树的存储
8、结构,那么其查询数据最核心的算法就是二分法查找算法,即通过键值的比较排除一定比例的可能性,从而缩小数据查找的范围,最终通过几次比较定位到要查找的数据。直观表现期问,我们还是以图为例:按照图示,我们查找的数据是1,首先,将根节点的数据块从磁盘读入内存,读出P值,比较发现小于P;接着,遍历根节点左指针指向数据块,读出C、F、J、M值,顺序比较后,找到J&M之间的指针;最后,遍历指针指向数据块,读出K、1值,定位所查询的数据1。根据以上算法,那么本次查找经历了三次磁盘的读取,三次内存数据的比较。由此看见,B树检索的时间复杂度主要取决于树的深度以及节点内保存的数据数量的多少。对于B+树的检索,其实算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BTreeHash 数据库 存储 引擎 技术 优劣 分析