MySQL存儲引擎InnoDB學(xué)習(xí)01-MySQL體系結(jié)構(gòu)和存儲引擎

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

Mysql被設(shè)計為一個單進程多線程的架構(gòu)的數(shù)據(jù)庫病瞳,MySql數(shù)據(jù)庫實例在系統(tǒng)上的表現(xiàn)就是一個進程。
當我們啟動一個Mysql實例時套菜,MySQL數(shù)據(jù)庫會去讀取配置文件,根據(jù)配置文件的參數(shù)來啟動數(shù)據(jù)庫實例(這與Oracle的參數(shù)文件spfile相似蛹头,但不同的是戏溺,Oracle中如果沒有參數(shù)文件,在啟動實例時會提示找不到該參數(shù)文件旷祸,數(shù)據(jù)庫啟動會失敗。而在MySQL數(shù)據(jù)庫中骚烧,可以沒有配置文件闰围,這時MySQL會按編譯時默認的參數(shù)啟動實例),MySQL數(shù)據(jù)庫是按如下順序讀取配置文件的:

/etc/my.cnf 
/etc/mysql/my.cnf 
/usr/local/mysql/etc/my.cnf
~/.my.cnf

如果配置文件中有相同配置參數(shù)辫诅,則以最后一個配置文件中參數(shù)為準涧狮。
配置文件中有個參數(shù)datadir么夫,該參數(shù)指定了數(shù)據(jù)庫所在的路徑肤视,Linux系統(tǒng)下默認為usr/local/mysql/data

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

mysql體系結(jié)構(gòu) .png

MySQL由以下幾部分組成:

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

需要特別注意的是:存儲引擎是基于表的腐螟,而不是數(shù)據(jù)庫困后。

1.2 MySQL存儲引擎

存儲引擎是MySQL區(qū)別于其他數(shù)據(jù)庫的一個最重要特性,存儲引擎的好處是:每個存儲引擎都有各自的特點汽绢,能夠根據(jù)具體的應(yīng)用建立不同存儲引擎表侧戴,由于MySQL的開源特性,用戶還可以根據(jù)MySQL預(yù)定義的存儲引擎接口編寫自己的存儲引擎酗宋。

1.2.1 常見存儲引擎

  • InnoDB存儲引擎
    ????InnoDB存儲引擎支持事務(wù),其設(shè)計目標主要面向在線事務(wù)處理(OLTP)的應(yīng)用寂曹,其特點是行鎖設(shè)計回右、支持外鍵稀颁、并支持類似于Oracle的非鎖定讀(即默認讀取操作不會產(chǎn)生鎖)楣黍,Mysql數(shù)據(jù)庫從5.5.8版本開始將InnoDB設(shè)置為默認的存儲引擎。InnoDB存儲引擎將數(shù)據(jù)放在一個邏輯的表空間中阶女,這個表空間像一個黑盒一樣由InnoDB存儲引擎自行管理(InnoDB存儲引擎的表單獨存放到一個獨立的idb文件中)哩治。
    ????InnoDB通過使用多版本并發(fā)控制(MVCC)來獲得高并發(fā),并且實現(xiàn)了SQL標準的4種隔離級別业筏,默認為REPEATABLE級別。同時消别,使用next_key_locking策略來避免幻讀。除此之外寻狂,InnoDB存儲引擎還提供了插入緩存(insert buffer)、二次寫(double write)缀壤、自適應(yīng)哈希索引(adaptive hash index)纠亚、預(yù)讀(read ahead)等高性能和高可用的功能。
    ????對于表中數(shù)據(jù)的存儲蒂胞,InnoDB存儲引擎采用了聚集(clustered)的方式,因此每張表的存儲都是按主鍵的順序進行存放岳瞭,如果在表中沒有顯式的指定主鍵蚊锹,InnoDB存儲引擎會為每一行生成一個6個字節(jié)的ROWID,并以此作為主鍵牡昆。
  • MyISAM引擎
    ????MyISAM存儲引擎不支持事務(wù)、表鎖設(shè)計柱宦、支持全文索引播瞳,主要面向一些OLAP數(shù)據(jù)庫應(yīng)用。同時MyISAM存儲引擎的緩沖池值緩存索引文件赢乓,而不緩沖數(shù)據(jù)文件。
    ????MyISAM存儲引擎表由MYD和MYI組成蚓炬,MYD用來存放數(shù)據(jù)文件躺屁,MYI用來存放索引文件。
    ????在MySQL5.0之前的版本,MyISAM默認支持的表大小為4GB烁兰,如果需要支持大于4GB的MyISAM表時余耽,則需要制定MAX_ROWS和AVG_ROW_LENGTH屬性苹熏,而從MySQL5.0版本開始,MyISAM默認支持256TB的單表數(shù)據(jù)轨域,這足夠滿足一般應(yīng)用的需求。
    ????不難看出朱巨,MyISAM適合沒有更新操作枉长,只有查詢(例如統(tǒng)計、報表)的業(yè)務(wù)場景必峰,MyISAM現(xiàn)在用的已經(jīng)很少了。

注意:對于MyISAM存儲引擎表凭需,MySQL數(shù)據(jù)庫只緩存其索引文件肝匆,數(shù)據(jù)文件的緩存交由操作系統(tǒng)本身來完成,這與其他LRU算法緩存數(shù)據(jù)的大部分數(shù)據(jù)庫不同旗国。此外,在MySQL5.1.23版本之前嫁怀,無論是在32位還是64位操作系統(tǒng)環(huán)境下借浊,緩存索引的緩沖區(qū)最大只能設(shè)置為4GB,在之后的版本中蚂斤,64位的操作系統(tǒng)可以支持大于4GB的索引緩沖區(qū)。

  • NDB存儲引擎
    ????2003年捌治,MySQL AB公司從Sony Ericsson公司收購了NDB集群引擎。
    ????NDB存儲引擎是一個集群存儲引擎肖油,類似于Oracle的RAC集群,不過與Oracle RAC share everything架構(gòu)不同的是视搏,其結(jié)構(gòu)是share nothing的集群架構(gòu)县袱,因此能提供更高的可用性筋遭。
    ????NDB的特點是數(shù)據(jù)全部放在內(nèi)存中(MySQL5.1版本開始可以將非索引數(shù)據(jù)存放在磁盤上)乖篷,因此主鍵查找(primary key lookups)的速度極快踏施,并且通過添加NDB數(shù)據(jù)存儲節(jié)點(Data Node)可以線性的提高數(shù)據(jù)庫性能畅形,是高可用、高性能的集群系統(tǒng)肾胯。
    ????值得注意的是敬肚,NDB存儲引擎的連接操作(JOIN)是在MySQL數(shù)據(jù)庫層完成的员寇,而不是在存儲引擎層完成的,這意味著負責的連接操作需要巨大的網(wǎng)絡(luò)開銷,因此查詢速度很慢。
  • Memory存儲引擎
    ????Memory存儲引擎(之前稱為HEAP存儲引擎)將表中的數(shù)據(jù)存放到內(nèi)存中仔拟,如果數(shù)據(jù)庫重啟或宕機,表中的數(shù)據(jù)都將消失利花。它非常適合存儲臨時數(shù)據(jù)挠乳,Memory存儲引擎默認使用哈希索引卖怜,而不是我們熟悉的B+樹索引奄抽。
    ????雖然Memory存儲引擎速度非趁羁校快,但在使用上有一定的限制,比如它只支持表鎖腔稀,并發(fā)性能較差,并且不支持TEXT和BLOB類型瘟芝,更重要的是存儲變長字段(varchar)時是按照定長字段(char)的方式進行的,因此會浪費內(nèi)存。
  • Archive存儲引擎
    ????Archive存儲引擎只支持INSERT和SELECT操作,從MySQL 5.1開始支持索引叫榕。
    ????Archive存儲引擎使用zlib算法將數(shù)據(jù)行(row)進行壓縮后存儲,壓縮比一般可達1:10寓落。
    ????Archive存儲引擎非常適合存儲歸檔數(shù)據(jù)荞下,如日志信息等史飞,Archive存儲引擎使用行鎖來實現(xiàn)高并發(fā)的插入操作仰税,但是其本身不是事務(wù)安全的存儲引擎,其設(shè)計目標是提供高速的插入和壓縮功能吐绵。
  • Federated存儲引擎
    ????Federated存儲引擎表并不存放數(shù)據(jù)河绽,它只是指向一臺遠程MySQL數(shù)據(jù)庫服務(wù)器上的表,這非常類似于SQL Server的鏈接服務(wù)器和Oracle的透明網(wǎng)關(guān)耙饰,不同的是,當前的Fedrated存儲引擎只支持MySQL數(shù)據(jù)庫表廷痘,不支持異構(gòu)數(shù)據(jù)庫表削咆。
  • Maria存儲引擎
    ????Maria存儲引擎是新開發(fā)的存儲引擎蠢笋,設(shè)計目標主要是用來取代原有的MyISAM存儲引擎,從而成為MySQL的默認存儲引擎(存儲引擎的開發(fā)者是MySQL創(chuàng)始人之一的Michael Widenius昨寞,因此它可以看作是MyISAM的后續(xù)版本)
    ????Maria存儲引擎的特點是:支持緩存數(shù)據(jù)和索引文件、應(yīng)用了行鎖設(shè)計歼狼、提供了MVCC功能享怀、支持事務(wù)和非事務(wù)安全的選項、以及更好的BLOB字符類型的處理性能添瓷。
  • 其他存儲引擎
    MySQL還有Merge、CSV坯汤、Sphinx搀愧、Infobright存儲引擎疆偿,他們都有各自的特點和使用場景搓幌。

1.3各個存儲引擎的比較

不同MySQL存儲引擎相關(guān)特新比較.png

如何查看自己當前使用的MySQL數(shù)據(jù)庫所支持的存儲引擎?

  • 可以通過命令:SHOW ENGINES查看:
  • 也可以通過查找information_schema中的ENGINES表查看


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市罢缸,隨后出現(xiàn)的幾起案子投队,更是在濱河造成了極大的恐慌,老刑警劉巖敷鸦,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扒披,死亡現(xiàn)場離奇詭異,居然都是意外死亡碟案,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門辆亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳖目,“玉大人,你說我怎么就攤上這事领迈。” “怎么了衷蜓?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵薪贫,是天一觀的道長。 經(jīng)常有香客問我扯夭,道長,這世上最難降的妖魔是什么交洗? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮咆爽,結(jié)果婚禮上置森,老公的妹妹穿的比我還像新娘。我一直安慰自己凫海,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布漾稀。 她就那樣靜靜地躺著建瘫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪殷蛇。 梳的紋絲不亂的頭發(fā)上拣播,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天收擦,我揣著相機與錄音,去河邊找鬼塞赂。 笑死,一個胖子當著我的面吹牛圆存,可吹牛的內(nèi)容都是我干的仇哆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼油讯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陌兑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤饿凛,失蹤者是張志新(化名)和其女友劉穎软驰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锭亏,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡贰镣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恭陡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡休玩,死狀恐怖劫狠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呐矾,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布蜒犯,位于F島的核電站荞膘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏淘菩。R本人自食惡果不足惜屠升,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一费奸、第九天 我趴在偏房一處隱蔽的房頂上張望进陡。 院中可真熱鬧,春花似錦趾疚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至焚廊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚼隘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工飞蛹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灸眼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓霉囚,卻偏偏與公主長得像宛徊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闸天,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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