MySQL--結構知識

結構圖


image

Connectors


用來支持各種語言和SQL的交互,比如PHP,Python,Java的JDBC

  • 方式:客戶端、API
  • 通信協議:TCP/IP; linux下:Unix Socket
  • 通信方式:同步半雙工
    • 同一時刻只能客戶端發送數據給服務端或者服務端返回數據給客戶端。
    • 客戶端發送SQL語句給服務端的時候,(在一次連接裏面)數據是不能分成小塊發送的,不管你的SQL語句有多大,都是一次性發送,服務端返回數據也是一次性的發送。
  • 連接方式:長連接(默認),也支持短連接
    • 長時間不活動的連接,MySQL服務器會斷開。默認都是28800秒,8小時。
    • MySQL服務允許的最大連接數默認是151個,最大可以設置成100000。
  • 驗證用戶權限:user表,db表,tables_priv表,columns_priv表

Server


數據庫的邏輯處理層

Management Serveices & Utilities

系統管理和控制工具,包括備份恢復、MySQL複製、集羣等;

Connection Management

連接管理,連接池,管理需要緩衝的資源,包括用戶密碼權限線程等;

Cache and Buffer

查詢緩存,除了行記錄的緩存之外,還有表緩存,Key緩存,權限緩存等;

Parser

用來解析SQL語句;

  • 詞法解析和語法解析,生成解析樹
  • 預處理器 進行權限校驗和語義解析重新生成解析樹

Optimizer

查詢優化器

  • 合法的語法樹,優化器將其轉成執行計劃
  • 一條查詢可以有很多種執行方式,最後都返回相同的結果。優化器的作用就是找到這其中最好的執行計劃。
  • 執行計劃:mysql生成查詢的一棵指令樹,然後通過存儲引擎執行完成這棵指令樹並返回結果。最終的執行計劃包含了重構查詢的全部信息。

SQL Interface

用來接收用戶的SQL命令,返回用戶需要的查詢結果

Storage Engines


Pluggable Storage Engines:插件式存儲引擎,它提供API給服務層使用,跟具體的文件系統交互。

InnoDB

  • 最開始是第三方公司爲MySQL開發的。
  • InnoDB是一個事務安全(與ACID兼容)的MySQL存儲引擎,它具有提交、回滾和崩潰恢復功能來保護用戶數據。
  • InnoDB行級鎖非鎖讀提高了多用戶併發性和性能。
  • 數據存儲在聚集索引中,以減少基於主鍵的常見查詢的I/O
  • InnoDB還支持外鍵引用完整性約束。
特點
  • 支持事務,支持外鍵,因此數據的完整性、一致性更高。
  • 支持行級別的鎖和表級別的鎖。
  • 支持讀寫併發,寫不阻塞讀(MVCC)。
  • 特殊的索引存放方式,可以減少IO,提升查詢效率。

適合:經常更新的表,存在併發讀寫或者有事務處理的業務系統。

MyISAM

  • MySQL自帶的存儲引擎,由ISAM升級而來。
  • 表級鎖限制了讀/寫的性能,因此在Web和數據倉庫配置中,它通常用於只讀或以讀爲主的工作。
特點
  • 支持表級別的鎖(插入和更新會鎖表)。
  • 不支持事務。
  • 擁有較高的插入(insert)和查詢(select)速度。
  • 存儲了表的行數(count速度更快)。

適合:只讀之類的數據分析的項目。

MEMORY

  • 數據存在內存中,快速訪問。以前被稱爲堆引擎。
  • 數據集提供了快速的鍵值查找。
特點
  • 把數據放在內存裏面,讀寫的速度很快,但是數據庫重啓或者崩潰,數據會全部消失。
  • 默認使用哈希索引。

只適合做臨時表。

CSV

  • 它的表實際上是帶有逗號分隔值的文本文件。
  • csv表允許以csv格式導入或轉儲數據,以便與讀寫相同格式的腳本和應用程序交換數據。
  • csv表沒有索引
特點
  • 不允許空行,不支持索引。
  • 格式通用,可以直接編輯。

適合在不同數據庫之間導入導出。

Archive

  • 緊湊的未索引的表用於存儲和檢索大量很少引用的歷史、存檔或安全審計信息。
特點
  • 不支持索引
  • 不支持update delete。

適用存檔,歷史。

自定義

  • mysql支持自定義的存儲引擎

File System


  • 文件
  • 硬盤
  • 內存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章