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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1677 | 回復: 0
打印 上一主題 下一主題

MySQL Storage Engine 小記 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-08-09 14:25 |只看該作者 |倒序瀏覽

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


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


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


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

Heap挺適合做測試的時候使用
BDB是MySQL第一款事務安全的存儲引擎。在Berkeley DB database library的基礎(chǔ)上建立,同樣是事務安全的,但BDB的普及率顯然不及InnoDB,因為大多數(shù)在MySQL中尋找支持事務的存儲引擎的同時也在找支持MVCC或是行級鎖定存儲引擎,而BDB只支持Page-level Lock。


附上一張《High Performance MySQL》 中的各存儲引擎的特性表
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


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/27731/showart_1119251.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP