关键词:
原文:《大型网站技术架构:核心原理与案例分析》,作者:李智慧
本书前面提到,由于传统的机械磁盘具有快速顺序读写、慢速随机读写的访问特性,这个特性对磁盘存储结构和算法的选择影响甚大。
为了改善数据访问特性,文件系统或数据库系统通常会对数据排序后存储,加快数据检索速度,这就需要保证数据在不断更新、插入、删除后依然有序,传统关系数据库的做法是使用B+树,如图4.20所示。
4.20 B+树原理示意图
B+树是一种专门针对磁盘存储而优化的N叉排序树,以树节点为单位存储在磁盘中,从根开始查找所需数据所在的节点编号和磁盘位置,将其加载到内存中然后继续查找,直到找到所需的数据。
目前数据库多采用两级索引的B+树,树的层次最多三层。因此可能需要5次磁盘访问才能更新一条记录(三次磁盘访问获得数据索引及行ID,然后再进行一次数据文件读操作及一次数据文件写操作)。
但是由于每次磁盘访问都是随机的,而传统机械硬盘在数据随机访问时性能较差,每次数据访问都需要多次访问磁盘影响数据访问性能。
目前许多NoSQL产品采用LSM树作为主要数据结构,如图4.21所示。
图4.21 LSM树原理示意图(图片来源互联网)
LSM树可以看作是一个N阶合并树。数据写操作(包括插入、修改、删除)都在内存中进行,并且都会创建一个新记录(修改会记录新的数据值,而删除会记录一个删除标志),这些数据在内存中仍然还是一棵排序树,当数据量超过设定的内存阈值后,会将这棵排序树和磁盘上最新的排序树合并。当这棵排序树的数据量也超过设定阈值后,和磁盘上下一级的排序树合并。合并过程中,会用最新更新的数据覆盖旧的数据(或者记录为不同版本)。
在需要进行读操作时,总是从内存中的排序树开始搜索,如果没有找到,就从磁盘上的排序树顺序查找。
在LSM树上进行一次数据更新不需要磁盘访问,在内存即可完成,速度远快于B+树。当数据访问以写操作为主,而读操作则集中在最近写入的数据上时,使用LSM树可以极大程度地减少磁盘的访问次数,加快访问速度。
作为存储结构,B+树不是关系数据库所独有的,NoSQL数据库也可以使用B+树。同理,关系数据库也可以使用LSM,而且随着SSD硬盘的日趋成熟及大容量持久存储的内存技术的出现,相信B+树这一“古老”的存储结构会再次焕发青春。
经典数据结构b树与b+树(转)
....com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度运行进行查找、顺序读取、插入和删除的数... 查看详情
[转]数据结构中各种树(代码片段)
阅读目录1.二叉树2.二叉查找树3.平衡二叉树3.1平衡查找树之AVL树3.2平衡二叉树之红黑树4.B树5.B+树6.B*树7.Trie树 数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。本文中对数据结构中常见的几种... 查看详情
从b树b+树b*树谈到r树
... http://blog.csdn.net/v_july_v/article/details/6530142 从B树、B+树、B*树谈到R树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R树。其中B树、B+树及B*树部分由weedge完成... 查看详情
从b树b+树b*树谈到r树
第一节、B树、B+树、B*树1.前言:动态查找树主要有:二叉查找树(BinarySearchTree),平衡二叉查找树(BalancedBinarySearchTree),红黑树(Red-BlackTree),B-tree/B+-tree/B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂... 查看详情
b树b-树b+树b*树
转自:http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.htmlB树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right);   查看详情
b树b-树b+树b*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非 查看详情
b树b-树b+树b*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; &nb 查看详情
b树b-树b+树b*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非 查看详情
b树b-树b+树b*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; &nb 查看详情
转载b树b-树b+树b*树
【本文转自】http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); &n 查看详情
转载b树b-树b+树b*树
转载自http://blog.csdn.net/manesking/archive/2007/02/09/1505979.aspxB树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 查看详情
从b树b+树b*树谈到r树
地址:https://blog.csdn.net/v_JULY_v/article/details/6530142/ 查看详情
从b树b+树b*树谈到r树
网上看到一篇不错的介绍B树与B+树的文章,转载下来进行分享 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由... 查看详情
数据结构与算法:树2-3树,2-3-4树,b树b+树b*树(了解)
...主,底部附有完整代码工具:IDEA本系列介绍的是数据结构:树这是第十篇目前计划一共有11篇:二叉树入门顺序二叉树线索化二叉树堆排序赫夫曼树(一)赫夫曼树(二)赫夫曼树(三)二叉排序树(BST)平衡二叉排序树AVL2-3树,2-3-4树,B树B+树B... 查看详情
算法多路查找树b树b+树
文章目录1.概述1.1多叉树1.2B树的基本介绍1.32-3树基本介绍1.3.12-3树应用案例2B树B+树B*树2.1B树2.2B+树2.3B*树本文为博主九师兄(QQ:541711153欢迎来探讨技术)原创文章,未经允许博主不允许转载。1.概述二叉树的操作效率较高,但是也... 查看详情
树--11---b-树b+树
文章目录B-树树--03---B-树、B+树、B*树B树是一种树状数据结构,它能够存储数据、对其进行排序并允许以==O(logn)的时间复杂度==进行查找、顺序读取、插入和删除等操作。B树的特性B树---搜索B树---插入分裂的规... 查看详情
b+树概念学习
转载自 从B树、B+树、B*树谈到R树 1.用阶定义的B树 B 树又叫平衡多路查找树。一棵m阶的B 树 (注:切勿简单的认为一棵m阶的B树是m叉树,虽然存在四叉树,八叉树,KD树,及vp/R树/R*树/R+树/X树/M树/线段树... 查看详情
b树,b+树,b*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; &nb 查看详情