1. MySQL體系結構和存儲引擎——MySQL體系結構、存儲引擎、鏈接MySQL

1、MySQL體系結構和存儲引擎

儘管各個平臺在底層(如線程)實現方面都各不相同,但MySQL基本上能保證在各個平臺上的物理結構的一致性。所以,用戶應該能很好的理解MySQL數據庫在全部這些平臺是如何運做的。mysql

1.1 定義數據庫和實例

數據庫:物理操做系統文件或其餘形式文件類型的集合。在MySQL數據庫中,數據庫文件能夠是frm、myd、myi、ibd文件。NDB引擎,是存放於內存之中的文件,但定義不變。sql

實例:MySQL數據庫由後臺線程以及一個共享內存區組成。共享內存能夠被運行的後臺線程所共享。在集羣狀況下,可能存在一個數據庫被多個數據實例使用的狀況。數據庫

從概念上來說,數據庫是文件的集合,是按照某種數據模型組織起來並存放於二級存儲器中的數據集合。緩存

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

 

MySQL 是一個單進程多線程架構的數據庫。網絡

MySQL 數據庫是按照 /etc/my.cnf -> /etc/myssql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/.my.cnf 的順序讀取配置文件的。多線程

若是幾個配置文件中有相同的參數,MySQL數據庫以最後讀取到的一個配置文件中的參數爲準。架構

1.2 MySQL 體系結構

 

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

  • 鏈接池組件
  • 管理服務和工具組件
  • SQL接口組件
  • 查詢分析器組件
  • 優化器組件
  • 緩衝(Cache)組件
  • 插件式存儲引擎
  • 物理文件

MySQL區別於其餘數據庫的最重要的一個特色就是插件式的表存儲引擎,注意,存儲引擎是基於表的。高併發

1.3 MySQL存儲引擎

1.3.1 InnoDB 存儲引擎

  其設計目標主要是面向在線事務處理(OLTP)的應用。其特色是支持事務、行鎖設計、支持外鍵、非鎖定讀(MVCC,即默認讀取操做不會產生鎖)。在MySQL5.5.8之後,InnoDB是默認的存儲引擎。

  InnoDB經過使用多版本併發控制(MVCC)來得到高併發,並實現了四種隔離級別,默認是 REPEATABLE級別

  使用next-key locking 的策略來避免幻讀現象

  提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等高性能和高可用的功能

  對錶中的數據採用彙集(clustered)方式,所以每張表都是按照主鍵的順序進行存放,若是沒有在表定義中指定主鍵,InnoDB存儲引擎將會爲每一行生成一個6字節的ROWID,並以此做爲主鍵。

1.3.2 MyISAM存儲引擎

  不支持事務、表鎖設計、支持全文索引,主要面向OLAP應用

  MySQL 5.5.8 以前的默認存儲引擎

  緩衝池只緩存索引文件,不緩存數據文件。數據文件由操做系統自己來完成

1.3.3 NDB 存儲引擎數據

  省略

 

1.5 連接 MySQL

鏈接 MySQL操做是一個鏈接進程和MySQL數據庫實例進行通訊。從程序設計的角度的來看,本質是進程通訊。常見的進程通訊方式有

管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。

1.5.1 TCP/IP 通訊

這種方式在 TCP/IP 鏈接上創建一個基於網絡的鏈接請求,通常狀況下,客戶端在一臺服務器,而MySQL實例(服務端)在另外一臺服務器,機器之間經過 TCP/IP 進行網絡鏈接。

 在經過TCP/IP 鏈接到MySQL 實例時,MySQL 數據庫會先檢查一張權限視圖,用來判斷髮起請求的客戶端是否容許鏈接到MySQL實例。

1.5.2 命名管道和共享內存

若是兩個須要進程通訊的進程在同一個服務器上,那麼可使用命名管道。MySQL 4.1 以後,還提供了共享內存的鏈接方式。

1.5.3 UNIX 域套接字

在Linux 和 UNIX環境下,還可使用UNIX 域套接字。UNIX 套接在不是一個協議,因此只能在 MySQL 客戶端和數據庫實例在同一臺服務器上的狀況下使用。

問題:當表的數據量大於1000萬時,MySQL性能會急劇降低嗎?

隨着行數的增長,性能會有所降低,但並非線性降低,若是用戶選擇了正確的存儲引擎,正確的配置,再多的數據量MySQL也能承受。如官方手冊說起的,在InnoDB存儲超過1TB的數據,處理插入、更新的操做平均 800次/秒。

相關文章
相關標籤/搜索