圖書目錄
第1章 MariaDB概述
1.1 MariaDB的歷史
1.2 MariaDB所做的事情
1.2.1 更豐富的存儲引擎
1.2.2 性能的提升
1.2.3 擴展和新特性
1.2.4 更好的測試
1.2.5 儘量消除錯誤和警告
1.3 MariaDB的版本與兼容性
1.3.1 MariaDB 5.1和MySQL 5.1的不兼容性
1.3.2 MariaDB 5.2和MySQL 5.1的不兼容性
1.3.3 MariaDB 5.3和MySQL 5.1、MariaDB 5.2的不兼容性
1.3.4 MariaDB 5.5和MariaDB 5.3的不兼容性
1.3.5 MariaDB 5.5與MariaDB 5.3和MySQL 5.5的不兼容性
1.3.6 MariaDB 10.0和MySQL 5.6的不兼容性
1.4 編譯和安裝MariaDB
1.4.1 使用二進制安裝包進行安裝
1.4.2 使用原始碼進行編譯安裝
1.5 聯繫社區
1.5.1 Launchpad團隊和郵件列表
1.5.2 MariaDB Commits列表
1.5.3 MariaDB Captains
1.5.4 MariaDB公告列表
1.5.5 IRC
1.5.6 討論組
1.5.7 要求增加新特性
1.5.8 MariaDB知識基礎
1.6 小結
第2章 MariaDB的擴展和新特性
2.1 更多的存儲引擎
2.1.1 全新的Aria存儲引擎
2.1.2 XtraDB存儲引擎
2.1.3 SphinxSE存儲引擎
2.1.4 FederatedX存儲引擎
2.1.5 TokuDB存儲引擎
2.1.6 Cassandra存儲引擎
2.1.7 CONNECT存儲引擎
2.1.8 Sequence存儲引擎
2.1.9 Spider存儲引擎
2.2 執行緒池技術和binlog group commit技術
2.2.1 執行緒池技術
2.2.2 binlog group commit技術
2.3 MariaDB其他擴展和新特性
2.3.1 更高的時間精度
2.3.2 虛擬列
2.3.3 用戶統計功能
2.3.4 KILL命令的擴展
2.3.5 命令執行進度報告
2.3.6 動態列
2.3.7 多源複製
2.4 小結
第3章 初識MariaDB原始碼
3.1 MariaDB原始碼的目錄組織結構
3.2 MariaDB對類型和函式的封裝
3.2.1 對類型的封裝
3.2.2 MariaDB對函式的封裝
3.3 調試MariaDB
3.3.1 準備工作
3.3.2 mysqld關鍵的函式調用
3.3.3 調試
3.4 小結
第4章 MariaDB基礎數據結構
4.1 記憶體池MEM_ROOT
4.1.1 記憶體碎片問題
4.1.2 MEM_ROOT的定義
4.1.3 MEM_ROOT的使用
4.1.4 MEM_ROOT的初始化
4.1.5 分配記憶體
4.1.6 記憶體回收
4.1.7 MEM_ROOT的使用場景
4.2 檔案快取IO_CACHE
4.2.1 高性能武器——快取
4.2.2 IO_CACHE的定義
4.2.3 IO_CACHE的使用
4.3 NET結構
4.4 執行緒上下文——THD
4.5 TABLE_SHARE
4.6 TABLE
4.7 小結
第5章 MariaDB執行緒池
5.1 執行緒池相關的參數
5.1.1 MariaDB 5.1和MariaDB 5.3中的執行緒池
5.1.2 MariaDB 5.5和MariaDB 10.0中的執行緒池
5.2 何時使用執行緒池
5.3 執行緒池的實現
5.3.1 執行緒池相關的數據結構
5.3.2 執行緒池的初始化
5.3.3 添加連線到執行緒池
5.3.4 worker執行緒
5.3.5 get_event函式
5.3.6 listener執行緒
5.3.7 timer執行緒
5.4 小結
第6章 二進制日誌binlog
6.1 簡介
6.1.1 binlog的作用
6.1.2 index檔案
6.2 binlog的使用
6.2.1 開啟binlog
6.2.2 選擇binlog的格式
6.2.3 binlog的相關參數
6.3 binlog事件
6.3.1 binlog事件格式
6.3.2 binlog事件類型
6.3.3 binlog事件的實現
6.4 清理binlog
6.4.1 手動清理binlog
6.4.2 自動清理binlog
6.4.3 purge命令的實現
6.5 binlog_cache_mngr結構
6.6 mysqlbinlog工具
6.7 使用binlog進行恢復
6.8 小結
第7章 binlog group commit技術
7.1 事務的兩階段提交
7.2 binlog group commit的工作原理
7.3 binlog group commit的實現
7.3.1 相關的數據結構
7.3.2 代碼執行流
7.3.3 事務排隊
7.3.4 leader執行緒的工作
7.3.5 prepare_ordered和commit_ordered接口
7.4 小結
第8章 複製
8.1 簡介
8.2 複製的作用
8.3 複製的工作原理
8.3.1 概要
8.3.2 relay-log
8.3.3 master.info檔案和relay-log.info檔案
8.4 複製的配置
8.4.1 在新安裝的主庫和從庫上配置複製
8.4.2 主庫有一定數據時的複製配置
8.4.3 選擇性複製
8.5 複製的實現
8.5.1 複製相關的數據結構
8.5.2 複製的初始化——init_slave函式
8.5.3 CHANGE MASTER TO命令——準備工作
8.5.4 STAERT SLAVE命令——開啟複製
8.5.5 STOP SLAVE命令——停止複製
8.5.6 slave IO執行緒
8.5.7 slave SQL執行緒
8.5.8 master dump執行緒
8.6 半同步複製
8.6.1 半同步複製的工作原理
8.6.2 半同步的安裝和配置
8.6.3 半同步複製的實現
8.6.4 半同步複製的變種
8.6.5 半同步複製的潛在問題
8.7 並行複製
8.7.1 MySQL的並行複製
8.7.2 MariaDB的並行複製
8.8 多源複製
8.8.1 多源複製的套用場景
8.8.2 多源複製相關的命令
8.8.3 MariaDB多源複製的實現
8.9 GTID
8.9.1 GTID的概念
8.9.2 在MySQL上配置基於GTID的複製
8.9.3 MySQL中GTID的實現
8.9.4 MariaDB中的GTID
8.10 小結
第9章 數據結構和算法
9.1 算法複雜度
9.2 B+樹和索引
9.2.1 磁碟的讀取
9.2.2 B+樹
9.2.3 資料庫索引
9.3 堆排序與快速排序
9.3.1 堆——優先權佇列
9.3.2 堆排序
9.3.3 快速排序——qsort
9.4 ORDER BY的實現
9.4.1 使用索引的已有順序
9.4.2 filesort算法
9.5 JOIN的實現
9.5.1 JOIN語句的使用
9.5.2 Nest Loop Join算法
9.5.3 Block Nest Loop Join算法
9.5.4 Batched Key Access Join算法
9.5.5 Hash Join算法
9.5.6 Sort Merge Join算法
9.6 小結
第10章 分散式資料庫
10.1 分散式資料庫概要
10.1.1 分散式資料庫的特點
10.1.2 系統的擴展方式
10.1.3 分散式資料庫中的技術難點
10.2 數據的分片方式
10.3 分散式資料庫實踐——京東分散式資料庫系統
10.3.1 京東分散式資料庫系統架構
10.3.2 高可用組的初始化
10.3.3 數據的分片
10.3.4 系統的高可用性
10.3.5 系統的可擴展性
10.4 小結
附錄A 資料庫與IO資源控制