三种基本的存储引擎比较

问题的本质仍是磁盘随机操做慢,顺序读写快的老问题。

 

传统数据库的核心一般是页级缓存、B+树、堆或索引组织表,这些机制,对随机IO的抵抗能力,都无一例外的可 悲的差。mysql

 

数据库如何抵抗随机IO的问题、方法与现实

https://blog.csdn.net/tianlianchao1982/article/details/8939309?locationNum=9&fps=1redis

 

 

1Hash存储引擎算法

表明数据库redismemcachesql

一般也常见于其余存储引擎的查找速度优化上。 Hash 索引结构的特殊性,其检索效率很是高,索引的检索能够一次定位,不像B-Tree 索引须要从根节点到枝节点,最后才能访问到页节点这样屡次的IO访问,因此 Hash 索引的查询效率要远高于 B-Tree 索引。虽然 Hash 索引效率高,可是 Hash 索引自己因为其特殊性也带来了不少限制和弊端。数据库

这里列举缺点:缓存

(1)Hash 索引仅仅能知足"=","IN"和"<=>"查询,不能使用范围查询。性能

(2)Hash 索引没法被用来避免数据的排序操做。优化

(3)Hash 索引不能利用部分索引键查询。spa

(4)Hash 索引在任什么时候候都不能避免表扫描。.net

Hash碰撞,就是链式扫描:

因为不一样索引键存在相同 Hash 值,因此即便取知足某个 Hash 键值的数据的记录条数,也没法从 Hash索引中直接完成查询,仍是要经过访问表中的实际数据进行相应的比较,并获得相应的结果。

(5)Hash 索引遇到大量Hash值相等的状况后性能并不必定就会比B-Tree索引高。

2B树存储引擎

表明数据库:MongoDBmysql(基本上关系型数据库)

20141110091559147.jpg

 

还有一种算是B树存储引擎:COLA树(CacheObliviousBTree)

表明数据库:tokudb

为了如何让B树更有效的执行,他们提出了一个缓存忘却CacheOblivious算法,该算法在不须要明确知道存储器层次中数据传输规模的状况下,也能够高效的工做。更多请参见:https://en.wikipedia.org/wiki/Cache-oblivious_algorithm

说个你们熟悉的名称TokuMX : 目前很是流行的NoSQL数据库MongoDB的底层替换成与TokuDB一样的存储引擎[ ToKuMx],达到了很是好的效 果

3LSM树(Log-Structured Merge Tree)存储引擎

表明数据库:nessDBleveldbhbase

核心思想的核心就是放弃部分读能力,换取写入的最大化能力。LSM Tree ,这个概念就是结构化合并树的意思,它的核心思路其实很是简单,就是假定内存足够大,所以不须要每次有数据更新就必须将数据写入到磁盘中,而能够先将最新的数据驻留在磁盘中,等到积累到最后多以后,再使用归并排序的方式将内存内的数据合并追加到磁盘队尾(由于全部待排序的树都是有序的,能够经过合并排序的方式快速合并到一块儿)。

 

https://blog.csdn.net/moonpure/article/details/79788897

相关文章
相关标签/搜索