mysql2023sg138中原信用盤原始碼網站平臺搭建資料結構型別部署全過程
大家都知道SG138中原 信用盤原始碼網站平臺搭建資料結構是用b+tree實現的,作為mysql資料技術開發人員飛機TG【@cctvboy】另外一種方式ν_Χ" code7813 我們可以用mysql的資料結構是用b+tree來實現的。為什麼不用其他資料結構呢?比如說hash、二叉樹、紅黑樹、b-tree。要了解mysql底層的資料結構實現,需要先了解一下各個資料結構的特點以及儲存方式:
Hash
雜湊表是鍵值對的集合,透過鍵(key)值即可快速的取出對應的值(value),因此hash表查詢的速度很快。但是,雜湊演算法有hash衝突的問題,也就是說多個不同的key最後得到的index相同,雖然hash透過連結串列的方法解決了hash衝突,但是如果使用hash用來儲存資料,mysql可能會將每一行資料都儲存在hash表中,這樣資料都會透過hash表來維護,如果資料庫運算元據量特別龐大,新增資料的時候會增加hash衝突次數。這是原因之一。
還有一個原因是因為hash不支援順序查詢,假如我們要對錶中的資料進行排序和範圍搜尋,hash實現起來會很麻煩。
二叉樹
二叉樹的每一個節點都只有兩個子節點,當需要向其插入更多的資料的時候,就必須要增加樹的高度,而增加樹的高度會導致IO的次數變多,對於二叉樹而言,它的查詢操作的時間複雜度就是樹的高度,樹的高度越高查詢效能會隨著資料的增多越來越低。
二叉樹節點中,右邊的節點一定會大於左邊的節點。如果是非正常的傾斜(比如id是自增的情況)的二叉樹,查詢一次資料就相當於與全表搜尋。
紅黑樹
紅黑樹是一個二叉平衡樹。平衡樹在插入和刪除的時候,會透過旋轉操作將樹的左右節點達到平衡。紅黑樹的特性導致從根節點到葉子節點的最長路徑不會超過最短路徑的2倍。在實際場景應用當中,MySQL表資料,一般情況下都是比較龐大、海量的。如果使用紅黑樹,樹的高度會特別高,紅黑樹雖說查詢效率很高。但是在海量資料的情況下,樹的高度並不可控,而且紅黑樹也需要不斷的調整平衡性,也需要消耗效能。如果我們要查詢的資料,正好在樹的葉子節點。那查詢會非常慢。
b-tree
B樹的葉子結點具有相同的深度。所有索引元素不重複,節點中的資料索引從左到右遞增排列。
那麼為什麼不選擇B-tree呢?
B樹的索引節點既要存索引資訊,又要存其對應的資料,每個節點一次I/O操作就可以完全載入,這樣能大大提高對資料讀取的效率。但是如果資料很大,那麼當樹的體量很大時,節點上的資料會超過磁碟塊大小範圍。但是B樹的高度是根據索引的大小決定的,比如一個葉子節點的大小是16Kb,一個索引元素按照1kb(比如一個表有二十個欄位,每個欄位都是bigint佔用8個位元組,可以算出,一行資料應該不會超出1KB,這是一個預估值《按照平均1kb計算》),一個葉子節點只能存16個索引元素,如果要查詢千萬級的資料,需要16 的N次方=一千萬才能查到資料,N就是查詢的索引次數。
b+tree
B+Tree和B-Tree的差距在於B+Tree的分支節點只儲存索引資訊,把資料都放在葉子節點上(非葉子節點是冗餘節點,取得是葉子節點在磁碟節點上某些部分的索引),而且葉子節點包含了書中所有的索引結構,從左到右有序的遞增的,這樣保證了相近的資料都能存在同一塊資料塊裡。葉子節點的每一頁都包含了上一頁和下一頁的記憶體地址的指標索引,因此B+樹具備了天然排序功能,在排序和範圍查詢的時候更方便。
同時B+樹的查詢次數更穩定,每次查詢次數都是相同的,都需要查詢到葉子節點。比如:在mysql中B+Tree預設的磁碟頁節點大小是16KB,假設索引(主鍵索引)是bigint型別的,那麼他會佔8個位元組,加上葉子結點的磁碟檔案地址6個位元組,節點索引大小大概是14tb,那麼每一個索引行(頁)就可以儲存1170個索引元素,加入第三行存的是葉子節點,因為節點中包含所有資料資訊(假設是整行資料,大小算1kb《比如一個表有二十個欄位,每個欄位都是bigint佔用8個位元組,可以算出,一行資料應該不會超出1KB,這是一個預估值》),那麼b+tree樹只需要三行就可以存放1170×1170×16=21,902,400 個索引元素了。所以B+Tree只需要三次的磁碟io就可以找到需要查詢的元素了。也就說千萬級的資料(走索引的情況)查詢只需要經過三級就可以快速的查詢到需要的元素了。
b-tree和b+tree的區別
b+樹只需要三級既可以儲存千萬級別的資料索引了,而b-樹需要是根據索引的索引元素大小來構建索引節點的,資料量較大的時候,b+樹io次數更少。
b+樹只有的葉子才會儲存資料,b-樹所有索引節點都會儲存資料。
b+樹所有查詢都要查詢到葉子節點,查詢效能穩定。
b+樹所有葉子節點在這裡插入圖片描述
形成有序連結串列,便於範圍查詢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026651/viewspace-2934866/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql2024sg138中原信用盤原始碼網站平臺搭建資料結構型別部署MySql原始碼網站資料結構型別
- 2023sg138中原系統OA信用盤原始碼網站平臺搭建部署環境原始碼網站
- 記錄BW-SGWIN原始碼信用盤盤口功能搭建部署過程原始碼
- Windows平臺Nginx部署https網站的過程WindowsNginxHTTP網站
- 介紹2022年信用盤平臺搭建原始碼更快的構建 Docker 映象的方法原始碼Docker
- redis資料結構原始碼閱讀——字串編碼過程Redis資料結構原始碼字串編碼
- Redis常用資料型別及其儲存結構(原始碼篇)Redis資料型別原始碼
- 線上教育網站原始碼如何搭建網校平臺,需要注意什麼?網站原始碼
- 教育網站原始碼:網校平臺搭建的存在為教培機構創造更高價值網站原始碼
- Redis原始碼分析-底層資料結構盤點Redis原始碼資料結構
- Linux下-LNMP環境搭建部落格網站(全過程)LinuxLNMP網站
- 安卓平臺Flutter啟動過程全解析安卓Flutter
- 41.部署LNMP平臺原始碼LNMP原始碼
- 教育平臺原始碼:網校平臺開發過程中,你需要注意的關鍵點原始碼
- 夢幻短影片線上播放網站原始碼APP播放器搭建社交平臺網站原始碼APP播放器
- long資料型別跨平臺問題資料型別
- PHP直播平臺原始碼搭建教程PHP原始碼
- Hexo靜態部落格免費部署到Coding託管平臺全過程Hexo
- Hydro OJ搭建全過程
- SLM——模擬過程與資料管理平臺
- Presto原始碼分析之資料型別REST原始碼資料型別
- 區域網資料夾共享,透過搭建私有云盤替換FTP過程詳解FTP
- 在Windows平臺使用IIS部署Flask網站WindowsFlask網站
- Redis基本資料型別底層資料結構Redis資料型別資料結構
- 2022全新開發新版SGWIN138信用盤原始碼搭建後前臺介面精美大方原始碼
- 資料結構:順序結構和鏈式結構的資料型別定義資料結構資料型別
- CentOS6.7原始碼搭建LAMP平臺CentOS原始碼LAMP
- 低程式碼平臺選型(二)部署篇
- 校園交易平臺後臺系統git操作全過程Git
- 簡述知識付費平臺搭建過程
- 收藏資料結構學習網站資料結構學習網站
- 教育平臺原始碼:教培機構為什麼要搭建自己的線上教育平臺原始碼
- oracle資料型別與儲存結構Oracle資料型別
- Redis資料結構:List型別全面解析Redis資料結構型別
- MDK編譯過程及檔案型別全解編譯型別
- 資料庫修改網站密碼?後臺修改網站?資料庫網站密碼
- 使用多種 Redis 資料型別構建一個文章投票網站Redis資料型別網站
- 開源原始碼一站式黨建培訓平臺搭建原始碼