第一章 MySQL體系結構和存儲引擎(學習筆記)

  1.  數據庫和數據庫實例數據庫

  數據庫是文件的集合,是依照某種數據模型組織起來並存放於二級存儲器(計算機主存儲器或內存以外的全部可訪問存儲器,如移動/固定硬盤,光盤)中的數據集合。在MySQL數據庫中,數據庫文件能夠是frm, MYD, MYI, ibd結尾的文件。緩存

  數據庫實例是程序,是位於用戶和操做系統之間的一層數據管理軟件,用戶對數據庫數據的任何操做,包括數據庫定義、數據查詢、數據維護、數據庫運行控制等都是在數據庫實例下進行的,應用程序只有經過數據庫實例才能和數據庫打交道多線程

  MySQL被設計爲一個單進程多線程架構的數據庫,因此,MySQL數據庫實例在系統上的表現就是一個進程架構

  2.  MySQL體系結構併發

  由上圖可知,MySQL由如下幾部分組成:高併發

  • 鏈接池組件
  • 管理服務和工具組件 (第四章會涉及partitioning,第八章會涉及 Backup & Recovery, Replication)
  • SQL接口組件
  • 查詢分析器組件
  • 優化器組件
  • 緩衝(Cache)組件
  • 插件式存儲引擎(本書重點,各章都會涉及InnoDB存儲引擎相關特性)
  • 物理文件(第三章)

  3. MySQL存儲引擎工具

  MySQL支持多種不一樣的存儲引擎,甚至留有預約義的存儲引擎接口以編寫本身的存儲引擎。每種存儲引擎都有各自的特色,可以根據具體的應用創建不一樣的存儲引擎表。(存儲引擎是基於表的)優化

  典型存儲引擎的簡單介紹:操作系統

  1) InnoDB存儲引擎(在後面會詳細介紹)插件

  InnoDB存儲引擎支持事務,其主要面向在線事務處理(on-line transaction processing)的應用。InnoDB存儲引擎將數據放在一個邏輯表空間中,這個表空間就像黑盒同樣由InnoDB存儲引擎自身進行管理。對於表中存儲的數據,InnoDB存儲引擎採用了彙集的方式,所以每張表的存儲都是按照主鍵的順序進行存放。若是沒有顯式地定義主鍵,InnoDB存儲引擎會爲每一行生成一個6字節的ROWID,並以此做爲主鍵。InnoDB存儲引擎的特色是行鎖設計,支持外鍵,支持非鎖定讀,使用多版本併發控制(MVCC)來得到高併發性,使用next-key locking的策略來避免幻讀,實現了SQL標準的4種隔離級別。另外,InnoDB存儲引擎還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等功能。

  2) MyISAM存儲引擎

  MyISAM存儲引擎不支持事務和表鎖設計,可是支持全文索引,主要面向一些OLAP(online analysis processing)的應用。

  爲何MyISAM存儲引擎不支持事務呢?

  在數據倉庫中,若是沒有ETL(extract,transform,load)這些操做,只是簡單的報表查詢,並不須要事務支持。

  另外,MyISAM存儲引擎還有一個不同凡響的地方在於它的緩衝池只緩存(cache)索引文件,而不緩衝數據文件,數據文件的緩衝交由操做系統自己來完成。

  MyISAM存儲引擎由MYD和MYI組成。MYD用於存放數據文件,MYI用於存放索引文件。

  下圖是不一樣存儲引擎相關特性的比較。(注意,InnoDB存儲引擎自1.2版本開始支持全文索引,full text search index)

   

相關文章
相關標籤/搜索