分形树Fractal tree介绍——具体如何结合TokuDB还没有太懂,先记住其和LSM都是一样的适合写密集...
在目前的Mysql数据库中,使用最广泛的是innodb存储引擎。innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择。当然,这偏文章讲的是TokuDB,不是innodb,相比innodb,TokuDB有着自己的特点。
转自:http://www.kryptosx.info/archives/931.html
BTree和Fractal tree的比较:
目前无论是SQL Server,还是MySQL的innodb,都是用的B+Tree(SQL Server用的是标准的B-Tree)的索引结构。从理论上来说,这个结构在查询过程中应该是不会慢的,此类基于比较的数据结构查询复平均杂度都是logn。B类树就是对于这个进行了优化,让它更适应磁盘,降低树的深度。
随机IO几乎是令所有DBA谈虎色变的一个问题,当数据量小的时候,所有数据都能到内存中那就没有这个问题(其实这个时候也就没有必要用B-Tree的这种块结构了),但是一旦数据量大于内存的话这个问题就出现了。其实从本质来说,k-v存储要解决的问题就是这么一个:尽可能快得写入,以及尽可能快的读取。
这也是设计数据结构时考虑最多的问题,在分析解决方法之前,我们讨论几个极端。走一个极端的话,如果我每次写数据都顺序写,那么对Insert来说的话是最快的,但是每次Query就需要Scan一遍整个表。那么如果我想获取最佳的读性能,那么方法就是像B-Tree那样全部排个序呗。但是因为B-Tree有那样的随机IO,这样我们有没有办法得到顺序写的写性能,
所以,TokuDB中使用了一个称之为Fractal tree(分形树)的索引结构来解决随机IO的问题。它主要是能让随机IO变成顺序IO。
Structure | Inserts | Point Queries | Range Queries |
B-Tree | Horrible | Good | Good (young) |
Append | Wonderful | Horrible | Horrible |
Fractal Tree | Good | Good | Good |
Fractal tree(分形树)简介
我们假设有这样一种集合的结构,相邻行空间加倍。每一行要么全满要么全空,全满行的数据都是排好序的。
数据插入:
以上图的数据存储状态为例,如果再写一个值的时候,会写在第一行,比如写了3,这个时候第一行是空的,所以就放到第一行。
再写一个值11的时候,因为第一行已经写满了,所以将3取出来,和11做排序,尝试写第二行。
又因为第二行也满了,所以将第二行的5和10也取出,对3,11,5,10进行排序。写入第三行。
最后的结果:
总体来看:
可以看出,这个数据结构能保证数据块都是满的。如果前面都满了,就会一层层合并下去,直到找到可以写入的块。
没明白的:
插入复杂度为O(log(N)/B),B是一个块存储的数据行数,N是数据量。但是我只想到O(N/B)的复杂度。据说是进行了优化得到的,不过没看懂。
提一下:BTree的复杂度为O(log(N)/log(B)),这是树的深度。B其实就是树的度,树的度越大,深度越低,成对数关系。
总结下Fractal Tree结构特点
- 由多个有序的数组构成,大小呈指数级增长
- 数组要么全空,要么全满
- 数据插入到最小的数组,如果空间不够就将数据进行Merge
查询性能:
如果不进行优化,查询性能并不好。我们需要扫描每一层,最坏情况下IO次数达 log2N。
为了提高查找的性能,TokuDB在每个数据上加了一个forwardpointer,指向下一行中第一个比它大的数据的位置(这个叫做Fractional Cascading)。平均地看,上一级的每个数都把下一级搜索范围限制到了常数个,所以磁盘IO的次数最差应该为O(logN)。
看到的另一种优化办法:
总结:
TokuDB主要的优点在于把随机的IO转换成顺序的IO写入。因此获得很好的写入速度,也因为这个,有很好的数据压缩效果。但如果是顺序写入,性能不如BTree。
因此,它适用于存档,大量随机插入的场景。
转载于:https://www.cnblogs.com/bonelee/p/6245167.html
分形树Fractal tree介绍——具体如何结合TokuDB还没有太懂,先记住其和LSM都是一样的适合写密集...相关推荐
- tokudb 分形树_分形树Fractal tree介绍——具体如何结合TokuDB还没有太懂,先记住其和LSM都是一样的适合写密集...
在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...
- Linux设备模型、平台设备驱动、设备树(device tree)、GPIO子系统以及pinctrl子系统介绍
文章目录 一.Linux设备模型介绍 (1)设备驱动模型总体介绍 (2)设备驱动模型文件表现 (3)设备驱动模型工作原理 [1]总线 [2]设备 [3]驱动 [4]注册流程 二.平台设备驱动介绍 (1 ...
- tokudb 分形树_TokuDB性能测试报告
一 .背景介绍 近年来,TokuDB作为MySQL的大数据(Big Data)存储引擎受到人们的普遍关注.其架构的核心基于一种新的叫做分形树(Fractal Trees)的索引数据结构,该结构是缓存无 ...
- tokudb 分形树_转载TokuDB性能测试报告
TokuDB作为MySQL的大数据(Big Data)存储引擎受到人们的普遍关注.TokuDB拥有很高的压缩比(官方称最大可达25倍),可以在很大的数据上创建大量的索引,并保持性能不下降.我们来实测一 ...
- Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)
在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...
- TokuDB介绍——本质是分形树(一个叶子4MB)+缓存减少写操作
其性能特点见:http://www.cnblogs.com/billyxp/p/3567421.html TokuDB 是一个高性能.支持事务处理的 MySQL 和 MariaDB 的存储引擎.Tok ...
- 分形(Fractal)及分形维数(Fractal dimension)
文章目录 1. 分形介绍 2. 分形的定义 3. 分形维数介绍 4. 历史 5. 缩放的作用(Role of scaling) 6. D 不是唯一描述符 7. 分形表面结构 8. 例子 8.8 Hau ...
- Python 再说勾股树,这次整一棵五彩的任意“生长”的分形树!
上一篇<Turtle库画一棵对称勾股树,美丽惊艳的分形世界!>中描绘了一棵对称的双色勾股树,详情见:Python Turtle库画一棵对称勾股树,美丽惊艳的分形世界!_汉阳Hann's H ...
- 第11章 递归分形树(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制递归分形树,如图所示.首先学习递归的概念,并学习if-elif-else语句:接着学习分形的概念,并利用递归调用绘制 ...
最新文章
- 现在无法开始异步操作。异步操作只能在异步处理程序或模块中开始,或在页生存期中的特定事件过程中开始...
- EJB与JAVA BEAN_J2EE的异步消息机制
- JS——EasyuiCombobox三级联动
- AspectJ对AOP的实现
- Leetcode 96. 不同的二叉搜索树 解题思路及C++实现
- 4-剑指offer: 把数组排成最小的数
- 查看ubuntu版本
- qtp启动java程序_转: QTP六脉神剑之调用Java程序
- 解决由于没有办理权限导致的403,权限不足
- thinkphp仿素材火教程_国外都用古风效果图获奖了,为什么你连素材都没有?
- 苹果:App Store中国区无版号游戏8月1日起下架;美国计划打造量子互联网;HHVM 4.67 发布 | 极客头条...
- 什么是mixin,为什么它们有用?
- html table奇偶行颜色设置 (CSS选择器)
- 解决Permission denied: user=root, access=WRITE, inode=“/“:root:supergroup:drwxr-xr-x问题
- ios使用video播放器,禁止自动全屏
- 数据质量监控工具-Apache Griffin
- 邮箱 签名 / 电子名片 设置
- 红蓝出屏3D图片,请使用红蓝眼镜观看
- 标准员培训建筑八大员培训建筑标准员建筑工程施工标准化管理
- 经济法期末模拟试卷及答案
热门文章
- app怎么嵌套vue页面_PHP抖音点赞APP【开发】HTML5
- python类是实例的工厂_Python设计模式之工厂方法模式实例详解
- python js加密解密_AES用cryptojs加密,用python解密加密Ciph
- 文字描边加粗_让文字表现出十足的个性!
- 编辑器插件不生效在html中,关于6.04版本HTML编辑器插件使用问题!
- 微信小程序开发第三弹
- mysql1045错误如何解决,Java面试真题精选
- ad放置网络标号_PCB工程师必备:AD常用快捷键总结,超级实用
- html css文本框按钮,css样式之区分input是按钮还是文本框的方法
- python面向对象图片_Python面向对象-概念、类、实例