京東一綫開發人員力作
詳細講述數據庫內部的實現原理
深入淺齣地闡述MariaDB的設計理念
廣泛涵蓋MariaDB區彆於MySQL的主要亮點功能
第1章 MariaDB概述 1
1.1 MariaDB的曆史 1
1.2 MariaDB所做的事情 2
1.2.1 更豐富的存儲引擎 2
1.2.2 性能的提升 2
1.2.3 擴展和新特性 3
1.2.4 更好的測試 3
1.2.5 盡量消除錯誤和警告 4
1.3 MariaDB的版本與兼容性 4
1.3.1 MariaDB 5.1和MySQL 5.1的不兼容性 4
1.3.2 MariaDB 5.2和MySQL 5.1的不兼容性 5
1.3.3 MariaDB 5.3和MySQL 5.1、MariaDB 5.2的不兼容性 5
1.3.4 MariaDB 5.5和MariaDB 5.3的不兼容性 6
1.3.5 MariaDB 5.5與MariaDB 5.3和MySQL 5.5 的不兼容性 7
1.3.6 MariaDB 10.0和MySQL 5.6的不兼容性 7
1.4 編譯和安裝MariaDB 8
1.4.1 使用二進製安裝包進行安裝 8
1.4.2 使用源代碼進行編譯安裝 9
1.5 聯係社區 11
1.6 小結 12
第2章 MariaDB的擴展和新特性 13
2.1 更多的存儲引擎 13
2.1.1 全新的Aria存儲引擎 13
2.1.2 XtraDB存儲引擎 16
2.1.3 SphinxSE存儲引擎 17
2.1.4 FederatedX存儲引擎 17
2.1.5 TokuDB存儲引擎 18
2.1.6 Cassandra存儲引擎 18
2.1.7 CONNECT存儲引擎 18
2.1.8 Sequence存儲引擎 19
2.1.9 Spider存儲引擎 20
2.2 綫程池技術和binlog group commit技術 22
2.2.1 綫程池技術 22
2.2.2 binlog group commit技術 23
2.3 MariaDB其他擴展和新特性 23
2.3.1 更高的時間精度 23
2.3.2 虛擬列 24
2.3.3 用戶統計功能 25
2.3.4 KILL命令的擴展 27
2.3.5 命令執行進度報告 27
2.3.6 動態列 28
2.3.7 多源復製 29
2.4 小結 29
第3章 初識MariaDB源代碼 31
3.1 MariaDB源代碼的目錄組織結構 31
3.2 MariaDB對類型和函數的封裝 33
3.2.1 對類型的封裝 33
3.2.2 對函數的封裝 33
3.3 調試MariaDB 34
3.3.1 準備工作 34
3.3.2 mysqld關鍵的函數調用 37
3.3.3 調試 38
3.4 小結 40
第4章 MariaDB基礎數據結構 41
4.1 內存池MEM_ROOT 41
4.1.1 內存碎片問題 42
4.1.2 MEM_ROOT的定義 44
4.1.3 MEM_ROOT的使用 46
4.1.4 MEM_ROOT的初始化 47
4.1.5 分配內存 48
4.1.6 內存迴收 50
4.1.7 MEM_ROOT的使用場景 52
4.2 文件緩存IO_CACHE 52
4.2.1 高性能武器——緩存 53
4.2.2 IO_CACHE的定義 54
4.2.3 IO_CACHE的使用 57
4.3 NET結構 63
4.4 綫程上下文——THD 65
4.5 TABLE_SHARE 69
4.6 TABLE 73
4.7 小結 76
第5章 MariaDB綫程池 77
5.1 綫程池相關的參數 77
5.1.1 MariaDB 5.1和MariaDB 5.3中的綫程池 77
5.1.2 MariaDB 5.5和MariaDB 10.0中的綫程池 78
5.2 何時使用綫程池 79
5.3 綫程池的實現 79
5.3.1 綫程池相關的數據結構 80
5.3.2 綫程池的初始化 82
5.3.3 添加連接到綫程池 84
5.3.4 worker綫程 85
5.3.5 get_event函數 86
5.3.6 listener綫程 89
5.3.7 timer綫程 92
5.4 小結 94
第6章 二進製日誌binlog 95
6.1 簡介 95
6.1.1 binlog的作用 96
6.1.2 index文件 96
6.2 binlog的使用 97
6.2.1 開啓binlog 97
6.2.2 選擇binlog的格式 97
6.2.3 binlog的相關參數 98
6.3 binlog事件 99
6.3.1 binlog事件格式 99
6.3.2 binlog事件類型 101
6.3.3 binlog事件的實現 108
6.4 清理binlog 109
6.4.1 手動清理binlog 109
6.4.2 自動清理binlog 109
6.4.3 purge命令的實現 109
6.5 binlog_cache_mngr結構 112
6.6 mysqlbinlog工具 112
6.7 使用binlog進行恢復 113
6.8 小結 113
第7章 binlog group commit技術 115
7.1 事務的兩階段提交 115
7.2 binlog group commit的工作原理 117
7.3 binlog group commit的實現 118
7.3.1 相關的數據結構 118
7.3.2 代碼執行流程 120
7.3.3 事務排隊 125
7.3.4 leader綫程的工作 128
7.3.5 prepare_ordered和commit_ordered接口 134
7.4 小結 135
第8章 復製 136
8.1 簡介 136
8.2 復製的作用 137
8.3 復製的工作原理 138
8.3.1 概要 138
8.3.2 relay-log 140
8.3.3 master.info文件和relay-log.info文件 140
8.4 復製的配置 141
8.4.1 在新安裝的主庫和從庫上配置復製 141
8.4.2 主庫有一定數據時的復製配置 144
8.4.3 選擇性復製 150
8.5 復製的實現 151
8.5.1 復製相關的數據結構 152
8.5.2 復製的初始化——init_slave函數 157
8.5.3 CHANGE MASTER TO命令——準備工作 159
8.5.4 START SLAVE命令——開啓復製 160
8.5.5 STOP SLAVE命令——停止復製 160
8.5.6 slave IO綫程 161
8.5.7 slave SQL綫程 164
8.5.8 master dump綫程 165
8.6 半同步復製 168
8.6.1 半同步復製的工作原理 168
8.6.2 半同步的安裝和配置 169
8.6.3 半同步復製的實現 171
8.6.4 半同步復製的變種 179
8.6.5 半同步復製的潛在問題 180
8.7 並行復製 181
8.7.1 MySQL的並行復製 181
8.7.2 MariaDB的並行復製 181
8.8 多源復製 182
8.8.1 多源復製的應用場景 182
8.8.2 多源復製相關的命令 183
8.8.3 MariaDB多源復製的實現 184
8.9 GTID 185
8.9.1 GTID的概念 186
8.9.2 在MySQL上配置基於GTID的復製 186
8.9.3 MySQL中GTID的實現 187
8.9.4 MariaDB中的GTID 195
8.10 小結 195
第9章 數據結構和算法 197
9.1 算法復雜度 197
9.2 B+樹和索引 198
9.2.1 磁盤的讀取 198
9.2.2 B+樹 199
9.2.3 數據庫索引 200
9.3 堆排序與快速排序 201
9.3.1 堆——優先級隊列 201
9.3.2 堆排序 202
9.3.3 快速排序——qsort 203
9.4 ORDER BY的實現 204
9.4.1 使用索引的已有順序 205
9.4.2 filesort算法 207
9.5 JOIN的實現 210
9.5.1 JOIN語句的使用 211
9.5.2 Nest Loop Join算法 212
9.5.3 Block Nest Loop Join算法 214
9.5.4 Batched Key Access Join算法 216
9.5.5 Hash Join算法 216
9.5.6 Sort Merge Join算法 217
9.6 小結 218
第10章 分布式數據庫 219
10.1 分布式數據庫概要 219
10.1.1 分布式數據庫的特點 219
10.1.2 係統的擴展方式 220
10.1.3 分布式數據庫中的技術難點 221
10.2 數據的分片方式 221
10.3 分布式數據庫實踐——京東分布式數據庫係統 222
10.3.1 京東分布式數據庫係統架構 222
10.3.2 高可用組的初始化 223
10.3.3 數據的分片 224
10.3.4 係統的高可用性 225
10.3.5 係統的可擴展性 227
10.4 小結 230
附錄A 數據庫與IO資源控製 231
自從60多年前關係型數據庫齣現起,它就被廣泛使用。至今,幾乎所有IT係統都離不開關係型數據庫。在MySQL齣現前,關係型數據庫行業幾乎被Oracle、IBM DB2和Microsoft SQL Server幾個商業巨頭壟斷瞭。商業數據庫的封閉性和高昂的價格,對IT行業在深度和廣度上的使用、提升數據庫係統以及時適應各種新需求(尤其是互聯網等行業帶來的新需求)造成瞭很大的阻礙。20世紀末開源數據庫MySQL的齣現和崛起,為整個數據庫行業帶來瞭巨大的希望。可惜隨著MySQL被Oracle公司收購,存在Oracle公司將MySQL閉源的巨大潛在風險。為瞭避免這種風險,為行業提供一個永久開源免費的關係型數據庫係統,MariaDB被創造瞭齣來。雖然MariaDB最初隻是MySQL的一個分支,但近年來隨著社區的壯大和普及度的迅猛上升,它在很多方麵已經超過瞭MySQL,例如性能、復製功能和存儲引擎等,並且大有完全替代MySQL的勢頭。
本書深入淺齣地闡述瞭MariaDB的設計理念,剖析瞭MariaDB的幾個關鍵而有趣的子係統。本書的作者是我的同事,我目睹瞭他們將日常工作實踐中總結和提煉齣MariaDB的心得轉化成書的過程。這是一本理論結閤實踐的書,讀者不但可以學習到MariaDB的理論,還可以參照書中的實例一步步地自行調試實踐。我相信本書會對有誌學習MariaDB的讀者有所幫助。
作為一個曾經在數據庫行業耕耘8年的老兵(主要從事SQL Server存儲引擎研發),我也深深地期待國人不但能深度掌握MariaDB的使用技術,還能在MariaDB社區作齣越來越多的貢獻,為積纍和提升數據庫方麵的核心能力而努力。期待這本書能啓發和引導更多的同行來參與MariaDB社區的工作並發揮齣價值。
何剛,京東集團技術副總裁
這本書的封麵設計非常吸引人,金屬質感的MariaDB Logo搭配深邃的藍色背景,給人一種專業、嚴謹又不失現代感的感覺。翻開第一頁,我就被其厚實的紙張和精美的排版所摺服,字體清晰,間距適宜,閱讀體驗極佳。內容方麵,我尤其欣賞作者對概念的梳理能力,雖然這本書的題目是《MariaDB原理與實現》,但我預期它會像一本精心打磨的工藝品,將那些看似枯燥的技術細節,通過生動形象的比喻和深入淺齣的講解,呈現在讀者麵前。我期望書中不僅能看到數據庫的底層架構,如存儲引擎的演進、事務隔離級彆的實現細節,甚至是對SQL解析和執行計劃生成過程的剖析,更能體會到作者在其中傾注的心血,如何將復雜的係統工程化,並最終轉化為穩定、高效的服務。這本書在我看來,更像是一位經驗豐富的工程師,將多年積纍的智慧與實踐心得,毫無保留地分享齣來,帶領讀者一步步探索MariaDB的精髓,解鎖其背後的運行機製,讓我對學習和掌握MariaDB的信心倍增,仿佛已經站在瞭通往精通的大道上。
評分這本書給我的第一印象是它在知識廣度上的深度挖掘。雖然題目明確指嚮MariaDB,但我預感作者在梳理其原理時,必然會涉及到數據庫係統的一些基礎理論和演進曆程。比如,書中或許會從關係型數據庫的發展曆史談起,介紹SQL語言的誕生和演變,再引申到ACID特性、事務的本質、索引的多種實現方式(B-tree, hash等)等通用概念,然後再具體到MariaDB是如何實現和優化的。這種由淺入深、由通用到具體的講解方式,對於我這樣的讀者來說,能夠構建起一個完整的知識體係,不僅僅是學習MariaDB,更是對整個數據庫領域有瞭更清晰的認識。我非常期待書中能夠包含對不同存儲引擎(如Aria, MyRocks)的深入對比分析,以及它們各自的優缺點和適用場景,這對於我根據實際需求選擇最閤適的存儲方案非常有幫助。相信通過這本書的學習,我能夠更加遊刃有餘地駕馭MariaDB,甚至可以將學到的知識遷移到其他數據庫係統中。
評分從這本書的裝幀設計和字體選擇來看,就透露著一種“工匠精神”,這讓我對內容充滿瞭期待。我猜想,在《MariaDB原理與實現》這本書中,作者必然會投入巨大的精力去剖析MariaDB的核心技術細節,比如它如何處理並發連接、如何管理內存和磁盤 I/O、以及其復製機製的底層原理。我特彆希望能看到關於 MariaDB innoDB 存儲引擎的深度解析,包括其頁結構、聚簇索引、二級索引、MVCC(多版本並發控製)的實現細節,以及迴滾段(rollback segment)和 redo log / undo log 的工作流程。此外,對於 MariaDB 在安全性方麵的設計,例如權限管理、用戶認證、數據加密等,我也希望能有詳盡的講解。如果書中還能包含一些關於 MariaDB 性能調優的實際案例,比如如何通過調整參數、優化SQL語句、設計閤理的錶結構來提升查詢速度和並發能力,那將是錦上添花。這本書無疑會成為我理解和掌握MariaDB的寶貴資源。
評分讀到這本書,首先讓我眼前一亮的是其內容的高度實踐性。從書名《MariaDB原理與實現》可以看齣,它並非那種泛泛而談的理論書籍,而是更加側重於將抽象的原理與實際的數據庫操作緊密結閤。我期待書中會包含大量的代碼示例、配置文件的解讀,甚至是實際故障排除的案例分析,讓我在學習過程中能夠立刻上手,驗證理論的可靠性。想象一下,書中可能詳細講解瞭如何優化慢查詢,如何進行性能調優,如何搭建高可用集群,這些都是日常工作中非常棘手的問題。而且,作者很可能還會深入剖析MariaDB的各個組件,比如查詢優化器、存儲引擎(特彆是InnoDB)、日誌係統等,並解釋它們是如何協同工作的,這對於理解數據庫的深層運作機製至關重要。我希望這本書能夠成為我手中的一把利器,在遇到數據庫相關的難題時,能夠迅速找到解決方案,並且更重要的是,通過學習,能夠從根源上理解問題,從而預防類似問題的發生,提升整個係統的穩定性和效率。
評分這本書的書名《MariaDB原理與實現》給我帶來瞭一種探索未知領域的興奮感。我設想,它不僅僅是一本技術手冊,更是一次深入MariaDB“內心世界”的旅程。作者很可能不僅僅是介紹如何使用MariaDB,而是會深入到其源代碼層麵,或者至少是基於對源代碼的理解,來闡述其工作原理。比如,書中或許會詳細解釋MariaDB是如何解析SQL語句的,不同的SQL語句是如何被轉換為內部執行計劃的,以及查詢優化器是如何進行工作的。我非常期待書中能夠有對 MariaDB 架構的詳細圖解,例如其連接器/綫程池、SQL解析器、查詢優化器、執行引擎、存儲引擎等模塊是如何劃分和交互的。對於復製(replication)部分,我也希望能夠看到其主從同步的原理,包括binlog的生成、傳輸和應用過程,以及半同步復製、多源復製等高級特性的實現。這本書的深度和廣度,將是我對MariaDB有全麵、深刻認識的關鍵。
評分互相監督麵對麵名字
評分還沒開始看,看瞭幾頁,蠻專業的
評分正版 實用隨時翻閱,正適閤現在使用
評分花瞭2個多小時,將書閱讀完畢。源代碼堆砌的比較多,而且對於優化的新特性,一筆帶過。購買的時候太過高估本書能帶給我的知識瞭,對於看過5.6/MariaDB 官方文檔的人 不推薦購買此書。
評分很好。行傢寫的書。已經看完瞭。
評分據說非常非常不錯,所以買來看看先
評分正在研讀中
評分值得推薦的一本書
評分正品,不錯,送貨速度快!
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.coffeedeals.club All Rights Reserved. 靜流書站 版權所有