亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: MySQL Storage Engine 小記 [打印本頁(yè)]

作者: lib    時(shí)間: 2008-08-09 14:25
標(biāo)題: MySQL Storage Engine 小記

這段時(shí)間在看《High Performance MySQL》,看到存儲(chǔ)引擎這個(gè)地方感到很多細(xì)節(jié)比較陌生,所以總結(jié)小記一些
為了適應(yīng)各種不同的運(yùn)行環(huán)境,MYSQL提供了多種不同的存儲(chǔ)引擎(Storage Engine ),在應(yīng)用程序開(kāi)發(fā)這個(gè)層面上,開(kāi)發(fā)者可以根據(jù)不同的需求選擇適合的Storage Engine 方案,更為靈活的是,你可以根據(jù)每張表將要存儲(chǔ)數(shù)據(jù)的特點(diǎn),選擇不同的Storage Engine,也就是說(shuō),在一個(gè)MYSQL數(shù)據(jù)庫(kù)中,可以混合使用多種不同的Storage Engine
首先小瞥一下MySQL的體系結(jié)構(gòu),在最高抽象層度下,可以用Garlan & Shaw的分層結(jié)構(gòu)體系來(lái)表示(左)


其中應(yīng)用層為所有RDBMS用戶提供用戶接口,邏輯層包括了所有核心功能的實(shí)現(xiàn),物理層則負(fù)責(zé)將數(shù)據(jù)存儲(chǔ)在硬件設(shè)備上。
圖中右側(cè)更為具體的描述了邏輯層的組成,查詢處理子系統(tǒng)、事務(wù)管理子系統(tǒng)、恢復(fù)管理子系統(tǒng)和存儲(chǔ)管理子系統(tǒng)共同組成了MySQL的邏輯層。相信Storage Engine的位置是在Storage Management處,既Storage Engine屬于Storage Management子系統(tǒng)的一部分
為了讓思路更清晰一些,下面給出一幅比較全面的體系結(jié)構(gòu)圖(或更確切的說(shuō)是流程圖,只是忽略了反饋)


上面三幅圖來(lái)自于一篇非官方(不保證百分百的正確)的MySQL體系結(jié)構(gòu)的報(bào)告,與《High Performance MySQL》一書(shū)中給出的MySQL大體結(jié)構(gòu)(下圖,基本對(duì)應(yīng)于Logic Layer,從第一幅圖右側(cè)可以看出MySQL logic layer同樣遵從分層體系結(jié)構(gòu))還是比較吻合的。


連接上圖中第二層和第三層之間的接口是并不針對(duì)任何存儲(chǔ)引擎的單一API,.大概由20個(gè)基本的類(lèi)似“啟動(dòng)事務(wù),返回結(jié)果集”等函數(shù)組成。存儲(chǔ)引擎并不處理SQL,相互之間也不通信,它們的任務(wù)只是簡(jiǎn)單的響應(yīng)高層傳來(lái)的請(qǐng)求。
存儲(chǔ)引擎各自的一些特點(diǎn)
上面提到的四種存儲(chǔ)引擎都有各自適用的環(huán)境,這取決于它們獨(dú)有的一些特征。主要體現(xiàn)在性能、事務(wù)、并發(fā)控制、參照完整性、緩存、 故障恢復(fù),備份及回存等幾個(gè)方面
目前比較普及的存儲(chǔ)引擎是MyISAM和InnoDB.而MyISAM又是絕大部分Web應(yīng)用的首選。MyISAM與InnoDB的主要的不同點(diǎn)在于性能和事務(wù)控制上。
MyISAM是早期ISAM(Indexed Sequential Access Method,我現(xiàn)在用的MySQL5.0已經(jīng)不支持ISAM了)的擴(kuò)展實(shí)現(xiàn),ISAM被設(shè)計(jì)為適合處理讀頻率遠(yuǎn)大于寫(xiě)頻率這樣一種情況,因此ISAM以及后來(lái)的MyISAM都沒(méi)有考慮對(duì)事物的支持,排除了TPM,不需要事務(wù)記錄,ISAM的查詢效率相當(dāng)可觀,而且內(nèi)存占用很少。MyISAM在繼承了這類(lèi)優(yōu)點(diǎn)的同時(shí),與時(shí)俱進(jìn)的提供了大量實(shí)用的新特性和相關(guān)工具。例如考慮到并發(fā)控制,提供了表級(jí)鎖,雖然MyISAM本身不支持容錯(cuò),但可以通過(guò)myisamchk進(jìn)行故障恢復(fù)。而且由于MyISAM是每張表使用各自獨(dú)立的存儲(chǔ)文件(MYD數(shù)據(jù)文件和MYI索引文件),使得備份及恢復(fù)十分方便(拷貝覆蓋即可),而且還支持在線恢復(fù)。
所以如果你的應(yīng)用是不需要事務(wù),處理的只是基本的CRUD操作,那么MyISAM是不二選擇
InnoDB被設(shè)計(jì)成適用于高并發(fā)讀寫(xiě)的情況.使用MVCC(Multi-Version Concurrency Control)以及行級(jí)鎖來(lái)提供遵從ACID的事務(wù)支持。InnoDB支持外鍵參照完整性,具備故障恢復(fù)能力。另外 InnoDB的性能其實(shí)還是不錯(cuò)的,特別是在處理大數(shù)據(jù)量的情況下,用官方的話說(shuō)就是: InnoDB的CPU效率是其他基于磁盤(pán)的關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)引擎所不能比的。不過(guò)InnoDB的備份恢復(fù)要麻煩一點(diǎn),除非你使用了4.1以后版本提供的Mulit-tablespace支持,因?yàn)镮nnoDB和MyISAM不同,他的數(shù)據(jù)文件并不是獨(dú)立對(duì)應(yīng)于每張表的。而是使用的共享表空間,簡(jiǎn)單的拷貝覆蓋方法對(duì)他不適用,必須在停掉MYSQL后對(duì)進(jìn)行數(shù)據(jù)恢復(fù)。使用Per-Table Tablespacesd,使其每張表對(duì)應(yīng)一個(gè)獨(dú)立的表空間文件,則情況要簡(jiǎn)單很多。
一般來(lái)說(shuō),如果需要事務(wù)支持,并且有較高的并發(fā)讀寫(xiě)頻率,InnoDB是不錯(cuò)的選擇。要是并發(fā)讀寫(xiě)頻率不高的話,其實(shí)可以考慮BDB,但由于在MySQL5.1及其以后版本中,將不再提供BDB支持。這個(gè)選項(xiàng)也就沒(méi)有了
至于Heap和BDB(Berkeley DB),相對(duì)來(lái)說(shuō),普及率不如前兩種,但在有些情況下,還是挺適用的
Heap存儲(chǔ)引擎就是將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,由于沒(méi)有磁盤(pán)I./O的等待,速度極快。但由于是內(nèi)存存儲(chǔ)引擎,所做的任何修改在服務(wù)器重啟后都將消失。

Heap挺適合做測(cè)試的時(shí)候使用
BDB是MySQL第一款事務(wù)安全的存儲(chǔ)引擎。在Berkeley DB database library的基礎(chǔ)上建立,同樣是事務(wù)安全的,但BDB的普及率顯然不及InnoDB,因?yàn)榇蠖鄶?shù)在MySQL中尋找支持事務(wù)的存儲(chǔ)引擎的同時(shí)也在找支持MVCC或是行級(jí)鎖定存儲(chǔ)引擎,而B(niǎo)DB只支持Page-level Lock。


附上一張《High Performance MySQL》 中的各存儲(chǔ)引擎的特性表
Attribute
MyISAM
Heap
BDB
InnoDB
Transactions
No
No
Yes
Yes
Lock granularity
Table
Table
Page (8 KB)
Row
Storage
Split files
In-memory
Single file per table
Tablespace(s)
Isolation levels
None
None
Read committed
All
Portable format
Yes
N/A
No
Yes
Referential integrity
No
No
No
Yes
Primary key with data
No
No
Yes
Yes
MySQL caches data records
No
Yes
Yes
Yes
Availability
All versions
All versions
MySQL-Max
All Versions

from
http://www.javaeye.com/topic/211951


本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/27731/showart_1119251.html




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2