三種基本的存儲引擎比較

問題的本質仍是磁盤隨機操做慢,順序讀寫快的老問題。

 

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

相關文章
相關標籤/搜索