传统数据库的核心一般是页级缓存、B+树、堆或索引组织表,这些机制,对随机IO的抵抗能力,都无一例外的可 悲的差。mysql
https://blog.csdn.net/tianlianchao1982/article/details/8939309?locationNum=9&fps=1redis
1、Hash存储引擎算法
表明数据库:redis、memcache等sql
一般也常见于其余存储引擎的查找速度优化上。 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索引高。
2、B树存储引擎
表明数据库:MongoDB、mysql(基本上关系型数据库)等
还有一种算是B树存储引擎:COLA树(CacheObliviousBTree)
表明数据库:tokudb
为了如何让B树更有效的执行,他们提出了一个缓存忘却CacheOblivious算法,该算法在不须要明确知道存储器层次中数据传输规模的状况下,也能够高效的工做。更多请参见:https://en.wikipedia.org/wiki/Cache-oblivious_algorithm。
说个你们熟悉的名称TokuMX : 目前很是流行的NoSQL数据库MongoDB的底层替换成与TokuDB一样的存储引擎[ ToKuMx],达到了很是好的效 果
3、LSM树(Log-Structured Merge Tree)存储引擎
表明数据库:nessDB、leveldb、hbase等
核心思想的核心就是放弃部分读能力,换取写入的最大化能力。LSM Tree ,这个概念就是结构化合并树的意思,它的核心思路其实很是简单,就是假定内存足够大,所以不须要每次有数据更新就必须将数据写入到磁盘中,而能够先将最新的数据驻留在磁盘中,等到积累到最后多以后,再使用归并排序的方式将内存内的数据合并追加到磁盘队尾(由于全部待排序的树都是有序的,能够经过合并排序的方式快速合并到一块儿)。
https://blog.csdn.net/moonpure/article/details/79788897