傳統數據庫的核心一般是頁級緩存、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