紅黑樹:linux
平衡二叉樹,經過對任何一條從根到葉子的簡單路徑上各個節點的顏色進行約束,確保沒有一條路徑會比其餘路徑長2倍,於是是近似平衡的。因此相對於嚴格要求平衡的AVL樹來講,它的旋轉保持平衡次數較少。用於搜索時,插入刪除次數多的狀況下咱們就用紅黑樹來取代AVL。nginx
紅黑樹應用比較普遍:sql
· 普遍用在C++的STL中。map和set都是用紅黑樹實現的。數據庫
· 著名的linux進程調度Completely Fair Scheduler,用紅黑樹管理進程控制塊。spa
· epoll在內核中的實現,用紅黑樹管理事件塊blog
· nginx中,用紅黑樹管理timer等索引
· Java的TreeMap實現進程
B樹,事件
B+樹:它們特色是同樣的,是多路查找樹,通常用於數據庫中作索引,由於它們分支多層數少,由於磁盤IO是很是耗時的,而像大量數據存儲在磁盤中因此咱們要有效的減小磁盤IO次數避免磁盤頻繁的查找。
B+樹是B樹的變種樹,有n棵子樹的節點中含有n個關鍵字,每一個關鍵字不保存數據,只用來索引,數據都保存在葉子節點。是爲文件系統而生的。圖片
B+樹相對B樹磁盤讀寫代價更低:由於B+樹非葉子結點只存儲鍵值,單個節點佔空間小,索引塊可以存儲更多的節點,從磁盤讀索引時所需的索引塊更少,因此索引查找時I/O次數較B-Tree索引少,效率更高。並且B+Tree在葉子節點存放的記錄以鏈表的形式連接,範圍查找或遍歷效率更高。Mysql InnoDB用的就是B+Tree索引。
B+樹主要用在文件系統以及數據庫作索引。好比磁盤存儲、文件系統、MySQL數據庫