[InnoDB]-----第1章 MySQL體系結(jié)構(gòu)和存儲引擎

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

數(shù)據(jù)庫領(lǐng)域中"數(shù)據(jù)庫"和"實例"的概念如下:

  • 數(shù)據(jù)庫:物理操作系統(tǒng)文件或其他形式文件類型的集合.
  • 實例:MySQL數(shù)據(jù)庫有后臺線程以及一個共享內(nèi)存區(qū)組成.

? 我們通常意義上講的數(shù)據(jù)庫實際上是實例,而數(shù)據(jù)庫在本地磁盤上存儲的數(shù)據(jù)文件才是真正意義上的數(shù)據(jù)庫.

? MySQL數(shù)據(jù)庫實例在系統(tǒng)上的表現(xiàn)就是一個進程.

? 當(dāng)MySQL數(shù)據(jù)庫實例啟動時,會現(xiàn)在某些默認(rèn)的位置查找配置文件,可以通過以下指令查詢這些位置.查詢出的位置有多個,MySQL會以最后一個位置中的配置為準(zhǔn).

mysql --help | grep my.cnf

? 配置文件中有一個參數(shù)datadir,指定了數(shù)據(jù)庫所在的路徑,但是這個路徑只是一個鏈接,指向了/opt/mysql_data目錄,用戶必須保證該目錄的用戶和權(quán)限只有mysql用戶和組可以訪問.

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

MySQL由以下幾部分構(gòu)成:

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

? MySQL數(shù)據(jù)庫區(qū)別于其他數(shù)據(jù)庫的最重要的一個特點就是其插件式的存儲引擎.MySQL插件式的存儲引擎架構(gòu)提供了一系列標(biāo)準(zhǔn)的管理和服務(wù)支持,這些標(biāo)準(zhǔn)與存儲引擎本身無關(guān),可能是每個數(shù)據(jù)庫系統(tǒng)本身必須的,而存儲引擎是底層物理結(jié)構(gòu)的實現(xiàn),可根據(jù)開發(fā)者的意愿進行開發(fā).

? 需要特別注意的是,存儲引擎是基于表的,而不是數(shù)據(jù)庫.

3. MySQL存儲引擎

? 存儲引擎的好處是,每個存儲引擎都有各自的特點,更夠genuine具體的應(yīng)用建立不同的存儲引擎表.

? 由于MySQL數(shù)據(jù)庫開源的特性,存儲引擎可以分為MySQL官方存儲引擎和第三方存儲引擎,如InnoDB.

(1). InnoDB存儲引擎

? InnoDB存儲引擎支持事務(wù),其設(shè)計主要面向聯(lián)機事務(wù)處理(OLTP)的應(yīng)用.特點是行鎖設(shè)計,支持外鍵,并且支持類似于Oracle的非鎖定讀,也就是默認(rèn)讀取操作不會產(chǎn)生鎖.

? InnoDB存儲引擎將數(shù)據(jù)放在一個邏輯的表空間中,像黑盒一樣由InnoDB存儲引擎自身進行管理.

? InnoDB通過多版本并發(fā)控制來獲得高并發(fā)性,并且實現(xiàn)了SQL標(biāo)準(zhǔn)的4中隔離級別,默認(rèn)為REPEATABLE.

SQL的四種隔離級別:

  1. READ UNCOMMITED(未提交讀):事務(wù)可以讀取未提交的數(shù)據(jù),這也稱為臟讀(Dirty Read)。
  2. READ COMMITED (提交讀):一個事務(wù)從開始到提交之前犀农,所做的任何修改對其他事務(wù)都是不可見的。在同一事務(wù)中粹湃,多次讀取同一數(shù)據(jù)但是返回不同的結(jié)果,也就是有其他事務(wù)更改了這些數(shù)據(jù)泉坐。
  3. REPEATABLE READ (可重復(fù)讀):該級別保證了在同一個事務(wù)中多次讀取同樣的記錄的結(jié)果是一致的为鳄。無法解決另一個幻讀 (PhantomRead)的問題。就是說在第一個事務(wù)開始時腕让,讀取到一批數(shù)據(jù)孤钦,但是伺候另一個事務(wù)又插入新數(shù)據(jù)并提交,此時第一個事務(wù)又讀取到這批數(shù)據(jù)但是發(fā)現(xiàn)多出了一條,貌似產(chǎn)生幻覺一樣纯丸。
  4. SERIALIZABLE(可串行化):它通過強制事務(wù)串行偏形,避免了前面說的幻讀問題。

? 使用一種被稱為next-key locking的策略來避免幻讀現(xiàn)象的產(chǎn)生.初次之外,InnoDB存儲引擎還提供了插入緩存,二次寫,自適應(yīng)哈希索引,預(yù)讀等高性能和高可用的功能.

? InnoDB存儲引擎采用了聚集的方式,因此每張表的存儲都是按主鍵順序進行存放.如果沒有顯示的定義主鍵,InnoDB會給每一行生成一個6字節(jié)的ROWID,以此為主鍵.

(2). MyISAM存儲引擎

? MyISAM存儲引擎不支持事務(wù),表鎖設(shè)計,支持全文索引,主要面向一些聯(lián)機分析處理(OLAP)數(shù)據(jù)庫應(yīng)用.

? MyISAM存儲引擎的緩沖池只緩存索引文件,不緩沖數(shù)據(jù)文件.

? MyISAM存儲引擎表有MYD和MYI組成,MYD用來存放數(shù)據(jù)文件,MYI用來存放索引文件.

(3). NDB存儲引擎

? NDB存儲引擎是一個集群存儲引擎,其結(jié)構(gòu)是share nothing的集群架構(gòu),因此能提供更高的可用性.

? NDB存儲引擎的鏈接操作是在MySQL數(shù)據(jù)庫層完成的,而不是在存儲引擎層完成的,這意味這需要巨大的網(wǎng)絡(luò)開銷,查詢速度慢.

(4). Memory存儲引擎

? Memory存儲引擎將表中的數(shù)據(jù)放在內(nèi)存中,默認(rèn)使用哈希索引.速度較快,但是只支持表鎖,并發(fā)性較差,且存儲變長字段時是按照定長字段的方式進行的,會浪費內(nèi)存.

(5). Archive存儲引擎

? Archive存儲引擎只支持inster和select操作,使用zlib算法將數(shù)據(jù)航進行壓縮后存儲,非常適合存儲貴方數(shù)據(jù).使用行鎖來實現(xiàn)高并發(fā)的插入操作,但是本身并不是事務(wù)安全的.

(6). Federated存儲引擎

? Federated存儲引擎表并不存放數(shù)據(jù),指向一臺遠程MySQL數(shù)據(jù)庫服務(wù)器上的表.

(7). Maria存儲引擎

? Maria存儲引擎可以被看做是MyISAM的后續(xù)版本.支持緩存數(shù)據(jù)和索引文件,應(yīng)用了行鎖設(shè)計,提供了MVCC功能,支持事務(wù)和非事務(wù)安全的選項,以及更好的BLOB字符類型的處理性能.

4. 連接MySQL

? 連接MySQL的操作是一個鏈接進程和MySQL數(shù)據(jù)庫實例進行通信,本質(zhì)上是進程間的通信.常用的進程通信方式有管道,命名管道,命名字,TCP/IP套接字,UNIX域套接字.

(1). TCP/IP

? TCP/IP套接字方式是MySQL數(shù)據(jù)庫在任何平臺下都提供的連接方式.這種方式在TCP/IP連接上建立一個基于網(wǎng)絡(luò)的連接請求,一般情況下客戶端在一臺服務(wù)器上,MySQL實例在另外一臺服務(wù)器上,兩臺機器通過一個TCP/IP網(wǎng)絡(luò)連接.

? 下面這個命令就可以通過TCP/IP方式進行MySQL的遠端連接:

mysql -h xxx.xxx.xxx.xxx -u username -p password;

? 在通過TCP/IP連接到MySQL實例時,MySQL會先檢查一張權(quán)限視圖,也就是mysql.user這張表.只有擁有權(quán)限的用戶+機器才可以對數(shù)據(jù)庫進行修改.

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

? 兩個需要進程通信的進程在同一臺服務(wù)器上,使用命名管道.

? MySQL也提供了共享內(nèi)存的鏈接方式.

(3). UNIX域套接字

? 由于UNIX域套接字不是網(wǎng)絡(luò)協(xié)議,所以只能在MySQL客戶端和數(shù)據(jù)庫實例在一臺服務(wù)器上的情況下使用.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末觉鼻,一起剝皮案震驚了整個濱河市俊扭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坠陈,老刑警劉巖萨惑,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仇矾,居然都是意外死亡庸蔼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門贮匕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姐仅,“玉大人,你說我怎么就攤上這事粗合。” “怎么了乌昔?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵隙疚,是天一觀的道長。 經(jīng)常有香客問我磕道,道長供屉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮伶丐,結(jié)果婚禮上悼做,老公的妹妹穿的比我還像新娘。我一直安慰自己哗魂,他們只是感情好肛走,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著录别,像睡著了一般朽色。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上组题,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天葫男,我揣著相機與錄音,去河邊找鬼崔列。 笑死梢褐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赵讯。 我是一名探鬼主播盈咳,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘦癌!你這毒婦竟也來了猪贪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讯私,失蹤者是張志新(化名)和其女友劉穎热押,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斤寇,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡桶癣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娘锁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牙寞。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莫秆,靈堂內(nèi)的尸體忽然破棺而出间雀,到底是詐尸還是另有隱情,我是刑警寧澤镊屎,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布惹挟,位于F島的核電站,受9級特大地震影響缝驳,放射性物質(zhì)發(fā)生泄漏连锯。R本人自食惡果不足惜归苍,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望运怖。 院中可真熱鬧拼弃,春花似錦、人聲如沸摇展。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吗购。三九已至医男,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捻勉,已是汗流浹背镀梭。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踱启,地道東北人报账。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像埠偿,于是被迫代替她去往敵國和親透罢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容