認識Mysql邏輯架構

  Mysql如今是大多數公司企業在用的數據庫,之因此用Mysql,一點是由於Mysql是開源軟件,一些有能力的公司會基於已有的Mysql架構,進行修改、調整改爲適合本身公司的業務須要。mysql

一點是由於Mysql免費,相對昂貴的Oracle服務,對於不少剛起步的公司來講,是最適合不過的數據庫了。sql

  之因此要認識Mysql的邏輯架構,就比如咱們本身在作開發時,首先須要先掌握本身系統用的分層架構,這樣在開發的過程當中,若是有哪一個環節產生問題,就很好排查。認識Mysql的邏輯數據庫

架構也同理,咱們在用Mysql的時候,咱們不清楚它何時會出現問題,可是當出現問題時(好比優化查詢sql,要從哪一步開始),咱們能夠更清楚的定位問題。編程

  

  1. Connections 鏈接器
    咱們鏈接Mysql的服務做爲客戶端鏈接Mysql服務端,Mysql能夠鏈接各個編程語言平臺
  2. 系統管理和控制工具(Management Serveices & Utilities)
    做爲Mysql服務的管理和控制工具,好比備份、還原、複製、集羣等
  3. 鏈接池(Connection Pool)
    鏈接池的主要功能是提供鏈接認證、線程複用、鏈接數限制等
  4. SQL Interface(SQL接口)
    這裏主要是接收Mysql 的DML、DDL語句,以及存儲過程、視圖、觸發器等
  5. Parse(解析器)
    這裏主要的對傳過來的sql字符串進行解析,好比咱們一開始接觸的jdbc編程,就是將字符串類型的sql語句發送到mysql裏,而後
    解析器首先對sql語句進行詞法分析,造成語法樹,接着再對語法樹進行語法分析,看各個分詞是否符合SQL92標準,符合的話再
    執行下一環節業務處理。
  6. 查詢優化器(Optimizer)
    查詢優化器根據傳過來的SQL語句,進行分析判斷是不是最優的執行語句,主要針對一下三個方面進行分析:
    * 使用哪個索引(一個表有若干個索引,選擇過濾力度最大的那個)
    * 多表關聯的錶鏈接順序
    * WHERE條件的前後順序(根據MYSQL最左前綴原則,會從新擺放條件順序)
  7. 查詢緩存(Cache&Buffer)
    MYSQL會將每一條SQL進行hash處理後將hash值放到一個map中,每次有SQL來時先計算SQL的hash值,比較是否相同,相同的
    話能夠執行內存的SQL,而沒必要對新的SQL語句進行解析、優化等操做,加快執行效率。
  8. 存儲引擎(Pluggable Storage Engines)
    MSQL的存儲引擎支持可插拔特性,即用戶可隨意替換想用的存儲引擎,也能夠自定義本身的存儲引擎,這裏主要針對INNODB、MYISAM
    存儲引擎進行分析比較。

     

    平時涉及到存儲引擎的選型,主要針對業務的須要來選擇,能夠參考各自的特色。緩存

    存儲引擎的選型:
    InnoDB:支持事務處理,支持外鍵,支持崩潰修復能力和併發控制。若是須要對事務的完整性要求比
    較高(好比銀行),要求實現併發控制(好比售票),那選擇InnoDB有很大的優點。若是須要頻繁的
    更新、刪除操做的數據庫,也能夠選擇InnoDB,由於支持事務的提交(commit)和回滾
    (rollback)。
    MyISAM:插入數據快,空間和內存使用比較低。若是表主要是用於插入新記錄和讀出記錄,那麼選擇
    MyISAM能實現處理高效率。若是應用的完整性、併發性要求比 較低,也能夠使用。
    MEMORY:全部的數據都在內存中,數據的處理速度快,可是安全性不高。若是須要很快的讀寫速度,
    對數據的安全性要求較低,不須要持久保存,能夠選擇MEMOEY。它對錶的大小有要求,不能創建太大
    的表。因此,這類數據庫只使用在相對較小的數據庫表。

    安全

  這裏有一張MYSQL的簡單執行流程圖,憑靠這張圖對MYSQL總體的一個執行流程會有清晰的認識。架構

  

 

   MYSQL的邏輯架構就介紹到這裏。固然MYSQL還有對應的物理架構,不過這一塊主要涉及到MYSQL的各個日誌文件,以及各個表的併發

數據文件以及索引文件,在後面的章節再作介紹。編程語言

相關文章
相關標籤/搜索