B+树和LSM存储引擎代表树和B-树
B+树和LSM比较
https://blog.csdn.net/u013928917/article/details/75912045
在关系型数据库mysql中普遍使用B+树作为索引,在实际中索引也分为聚集索引和非聚集索引,而在hbase中则采用的是LMS树组织数据的。两者各有自己的优劣。
B+树
B+树由B-树演变而来,B-树是一种多路搜索树,并且具有以下特点:
定义任意非叶子结点最多只有M个儿子;且M>2;
.根结点的儿子数为[2, M];
.除根结点以外的非叶子结点的儿子数为[M/2, M];
.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
非叶子结点的关键字个数=指向儿子的指针个数-1;
.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
所有叶子结点位于同一层;
B-树图如下:
B+树和B-树的不同在于
其定义基本与B-树同,除了:
非叶子结点的子树指针与关键字个数相同;
非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树
为所有叶子结点增加一个链指针;
所有关键字都在叶子结点出现;
B+树如下图:
LSM树
LSM 树按另一种不同的方式组织数据,输入的数据会被先存在日志文件中,这些文件内的数据是完全有序的,当文件被修改时,对应的更新会被先保存在内存中,这样可以加速查询。LSM树分为两个部分,一部分在磁盘一部分在内存,当内存空间逐渐被占满之后,LSM会把这些有序的键刷新到磁盘,同时和磁盘中的LSM树合并成一个文件。
LSM树的过程如下:
数据查找和数据传输
B+树的特点决定了能够对主键进行高效的查找和删除,B+树能够提供高效的的范围扫描功能得益于相互连接且按主键有序,扫描时避免了耗时的遍历操作。
LSM树在查找时先查找内存的存储,如果在内存中未命中就去磁盘文件中查找文件,找到key之后返回最新的版本。
B树和LSM树最主要的区别在于他们的结构和如何利用硬件,特别是磁盘。
在没有太多的修改时,B+树表现得很好,因为修改要求执行高代价的优化操作以保证查询能在有限的时间内完成。LSM以磁盘传输速率工作,并能较好地扩展以处理大量数据,他们使用日志文件和内存存储来将随机写转换成顺序写,因此也能够保证稳定的数据插入速率。由于读写分离,两个操作也不存在冲突的问题。
LSM树的主要目标是快速的建立索引,B树是建立索引的通用技术,但是在大并发插入数据的情况下,B树需要大量的随机IO,这些随机IO严重影响索引建立速度。LSM通过磁盘序列写,来达到最优的写性能,因为这个降低了磁盘的寻道次数,一次IO可以写入多个索引块。
本文来自 学zaza 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u013928917/article/details/75912045?utm_source=copy
B+树和LSM存储引擎代表树和B-树的更多相关文章
- 【转帖】LSM树 和 TSM存储引擎 简介
LSM树 和 TSM存储引擎 简介 2019-03-08 11:45:23 长烟慢慢 阅读数 461 收藏 更多 分类专栏: 时序数据库 版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...
- 为什么选择b+树作为存储引擎索引结构
为什么选择b+树作为存储引擎索引结构 在数据库或者存储的世界里,存储引擎的角色一直处于核心位置.往简单了说,存储引擎主要负责数据如何读写.往复杂了说,怎么快速.高效的完成数据的读写,一直是存储引擎要解 ...
- MySQL:InnoDB存储引擎的B+树索引算法
很早之前,就从学校的图书馆借了MySQL技术内幕,InnoDB存储引擎这本书,但一直草草阅读,做的笔记也有些凌乱,趁着现在大四了,课程稍微少了一点,整理一下笔记,按照专题写一些,加深一下印象,不枉读了 ...
- InnoDB存储引擎的B+树索引算法
关于B+树数据结构 ①InnoDB存储引擎支持两种常见的索引. 一种是B+树,一种是哈希. B+树中的B代表的意思不是二叉(binary),而是平衡(balance),因为B+树最早是从平衡二叉树演化 ...
- [MySQL Reference Manual]15. 其他存储引擎
15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...
- cassandra vs mongo (1)存储引擎
摘要 在MongoDB 初识篇中谈到过Mongo 与 Cassandra的区别,这边再谈谈Mongo与Cassandra的存储引擎差别 概括 存储引擎: 类型 功能 应用 hash 增删改.随机读.顺 ...
- 时序数据库技术体系 – InfluxDB TSM存储引擎之TSMFile
本文转自 http://hbasefly.com/2018/01/13/timeseries-database-4/ 为了更加系统的对时序数据库技术进行全方位解读,笔者打算再写一个系列专题(嘿嘿,好像 ...
- InnoDB存储引擎表的逻辑存储结构
1.索引组织表: 在InnoDB存储引擎中,表都是依照主键顺序组织存放的.这样的存储方式的表称为索引组织表,在innodb存储引擎表中,每张表都有主键.假设创建的时候没有显式定义主键,则Inn ...
- HBase LSM树存储引擎详解
1.前提 讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎. B树存储引擎. LSM树(Log-Structured Merge Tree)存储引擎. 2. 哈希 ...
随机推荐
- LeetCode:罗马数字转整数【13】
LeetCode:罗马数字转整数[13] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ...
- Python 1 的数据类型
Python3 中有六个标准的数据类型: Number(数字)String(字符串)List(列表)Tuple(元组)Sets(集合)Dictionary(字典) 1.Number(数字) pytho ...
- docker多个容器连接 将 Rails 程序部署到 Docker 容器中
在docker中使用MySQL数据库 https://yq.aliyun.com/articles/583765 将 Rails 程序部署到 Docker 容器中
- Yii2 注册表单验证规则 手机注册时候使用短信验证码
public function rules() { return [ ['username', 'filter', 'filter' => 'trim'], ['username', 'requ ...
- awk中的常用关于处理字符串的函数
1.替换字符串中的某一部分. 函数:gensub(/rexpr/,"replace","g","string"),gensub返回一个新的字 ...
- iOS_核心动画CALayer(一)
目 录: 一.核心动画简介 二.图层与视图之间的关系 三.CALayer的使用说明 四.CALayer的隐式动画属性 五.在CALayer上绘图 六.总结 一.核心动画简介 Core Anim ...
- eclipse maven 项目 maven build 无反应
eclipse maven 项目 使用maven build ,clean 等命令均无反应,控制台无任何输出 1.打开Window --> Preferences --> Java --& ...
- CCNA 课程 七
WAN(Wide Area Network)广域网 运行在OSI模型的数据链路层.物理层. 数据链路层的协议主要有: HDLC (High-Level Data Link Control 高级数据链 ...
- win7下users用户文件转移到其他盘符
在安装完的系统中, 1.重启按F8键到修复系统界面: 2.下一步->下一步->运行dos窗口,打开dos窗口: 3.拷贝命令:robocopy "C:\Users" & ...
- hihoCoder挑战赛27题目一 福字 (dp)
题目: 一个n × n的矩阵,其中每个位置都是一个非负整数. 一个福字被定义成是大小为 k 的正方形,满足其中的每个位置上的数都恰好比他的左边的那个和上边的那个大1(如果左边或上边的那个不存在的话就无 ...