日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

1. MySQL體系結(jié)構(gòu)和存儲引擎——MySQL體系結(jié)構(gòu)、存儲引擎、連接MySQL

 路人甲Java 2022-04-01

一、MySQL體系結(jié)構(gòu)和存儲引擎

盡管各個平臺在底層(如線程)實現(xiàn)方面都各不相同,但MySQL基本上能保證在各個平臺上的物理結(jié)構(gòu)的一致性。因此,用戶應(yīng)該能很好的理解MySQL數(shù)據(jù)庫在所有這些平臺是如何運(yùn)作的。

1.1 定義數(shù)據(jù)庫和實例

數(shù)據(jù)庫:物理操作系統(tǒng)文件或其他形式文件類型的集合。在MySQL數(shù)據(jù)庫中,數(shù)據(jù)庫文件可以是frm、myd、myi、ibd文件。NDB引擎,是存放于內(nèi)存之中的文件,但定義不變。

實例:MySQL數(shù)據(jù)庫由后臺線程以及一個共享內(nèi)存區(qū)組成。共享內(nèi)存可以被運(yùn)行的后臺線程所共享。在集群情況下,可能存在一個數(shù)據(jù)庫被多個數(shù)據(jù)實例使用的情況。

從概念上來講,數(shù)據(jù)庫是文件的集合,是按照某種數(shù)據(jù)模型組織起來并存放于二級存儲器中的數(shù)據(jù)集合。

數(shù)據(jù)庫實例是程序,是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用戶對數(shù)據(jù)庫數(shù)據(jù)的任何操作,包括數(shù)據(jù)庫定義、數(shù)據(jù)查詢、數(shù)據(jù)維護(hù)、數(shù)據(jù)庫運(yùn)行控制等都是在數(shù)據(jù)庫實例下進(jìn)行的,應(yīng)用程序只有通過數(shù)據(jù)庫實例才能和數(shù)據(jù)庫打交道。

 

MySQL 是一個單進(jìn)程多線程架構(gòu)的數(shù)據(jù)庫。

MySQL 數(shù)據(jù)庫是按照 /etc/my.cnf -> /etc/myssql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/.my.cnf 的順序讀取配置文件的。

如果幾個配置文件中有相同的參數(shù),MySQL數(shù)據(jù)庫以最后讀取到的一個配置文件中的參數(shù)為準(zhǔn)。

1.2 MySQL 體系結(jié)構(gòu)

 

 由圖可知,MySQL由以下幾部分組成:

  • 連接池組件
  • 管理服務(wù)和工具組件
  • SQL接口組件
  • 查詢分析器組件
  • 優(yōu)化器組件
  • 緩沖(Cache)組件
  • 插件式存儲引擎
  • 物理文件

MySQL區(qū)別于其他數(shù)據(jù)庫的最重要的一個特點就是插件式的表存儲引擎,注意,存儲引擎是基于表的。

1.3 MySQL存儲引擎

1.3.1 InnoDB 存儲引擎

  其設(shè)計目標(biāo)主要是面向在線事務(wù)處理(OLTP)的應(yīng)用。其特點是支持事務(wù)、行鎖設(shè)計、支持外鍵、非鎖定讀(MVCC,即默認(rèn)讀取操作不會產(chǎn)生鎖)。在MySQL5.5.8以后,InnoDB是默認(rèn)的存儲引擎。

  InnoDB通過使用多版本并發(fā)控制(MVCC)來獲得高并發(fā),并實現(xiàn)了四種隔離級別,默認(rèn)是 REPEATABLE級別

  使用next-key locking 的策略來避免幻讀現(xiàn)象

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

  對表中的數(shù)據(jù)采用聚集(clustered)方式,因此每張表都是按照主鍵的順序進(jìn)行存放,如果沒有在表定義中指定主鍵,InnoDB存儲引擎將會為每一行生成一個6字節(jié)的ROWID,并以此作為主鍵。

1.3.2 MyISAM存儲引擎

  不支持事務(wù)、表鎖設(shè)計、支持全文索引,主要面向OLAP應(yīng)用

  MySQL 5.5.8 之前的默認(rèn)存儲引擎

  緩沖池只緩存索引文件,不緩存數(shù)據(jù)文件。數(shù)據(jù)文件由操作系統(tǒng)本身來完成

1.3.3 NDB 存儲引擎數(shù)據(jù)

  省略

 

1.5 鏈接 MySQL

連接 MySQL操作是一個連接進(jìn)程和MySQL數(shù)據(jù)庫實例進(jìn)行通信。從程序設(shè)計的角度的來看,本質(zhì)是進(jìn)程通信。常見的進(jìn)程通信方式有

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

1.5.1 TCP/IP 通信

這種方式在 TCP/IP 連接上建立一個基于網(wǎng)絡(luò)的連接請求,一般情況下,客戶端在一臺服務(wù)器,而MySQL實例(服務(wù)端)在另一臺服務(wù)器,機(jī)器之間通過 TCP/IP 進(jìn)行網(wǎng)絡(luò)連接。

 在通過TCP/IP 連接到MySQL 實例時,MySQL 數(shù)據(jù)庫會先檢查一張權(quán)限視圖,用來判斷發(fā)起請求的客戶端是否允許連接到MySQL實例。

1.5.2 命名管道和共享內(nèi)存

如果兩個需要進(jìn)程通信的進(jìn)程在同一個服務(wù)器上,那么可以使用命名管道。MySQL 4.1 之后,還提供了共享內(nèi)存的連接方式。

1.5.3 UNIX 域套接字

在Linux 和 UNIX環(huán)境下,還可以使用UNIX 域套接字。UNIX 套接在不是一個協(xié)議,所以只能在 MySQL 客戶端和數(shù)據(jù)庫實例在同一臺服務(wù)器上的情況下使用。

問題:當(dāng)表的數(shù)據(jù)量大于1000萬時,MySQL性能會急劇下降嗎?

隨著行數(shù)的增加,性能會有所下降,但并不是線性下降,如果用戶選擇了正確的存儲引擎,正確的配置,再多的數(shù)據(jù)量MySQL也能承受。如官方手冊提及的,在InnoDB存儲超過1TB的數(shù)據(jù),處理插入、更新的操作平均 800次/秒。

 

 

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多