第一層并不是mysql獨有的补鼻,大多數(shù)基于網(wǎng)絡的客戶端/服務器的工具或服務都有類似的架構(gòu)
不如鏈接處理,授權(quán)認證咨跌,安全等等
第二層是mysql核心功能位置锌半,包括查詢解析寇漫,分析,優(yōu)化记焊,緩存以及所有的內(nèi)置函數(shù)所有的跨存儲引擎的功能都在這一層實現(xiàn):存儲過程栓撞,觸發(fā)器,視圖等
第三層包含了存儲引擎瓢颅。存儲引擎負責myslq中數(shù)據(jù)的存儲和提取弛说。服務器通過api與存儲引擎進行通信,這些api屏蔽了不同存儲引擎之間的差異
并發(fā)控制
讀寫鎖:
在處理并發(fā)讀或?qū)憰r巾兆,可以通過實習那一個有兩種類型的鎖組成的鎖系統(tǒng)來解決問題虎囚,這兩種類型通常被稱為共享鎖和排他鎖,也叫讀鎖和寫鎖
讀鎖是共享的額圃伶,寫鎖是排他的額蒲列,一個寫鎖會阻塞其他寫鎖和讀鎖
鎖粒度
mysql中不同存儲引擎支持不同的鎖機制:myisam與memory存儲引擎采用表及鎖;BDB存儲引擎采用的是頁級鎖侥猩,也支持表鎖; innoDB存儲引擎即支持行級鎖欺劳,也持支表級鎖,默認采用行級鎖
表級鎖:mysql中開銷最小的策咯枫弟,加鎖速度快鹏往,鎖定整張表,粒度大伊履,不會出現(xiàn)死鎖,發(fā)生競爭的概率高,并發(fā)度最低奠货,性能最差
行級鎖:開銷大递惋,加鎖速度慢鎖定一行數(shù)據(jù),粒度小萍虽,會出現(xiàn)死鎖,發(fā)生鎖競爭的概率最低超全,并發(fā)最高嘶朱,性能高
頁級鎖:開銷和加鎖速度介于表鎖和行鎖之間光酣,鎖定一頁數(shù)據(jù)救军。會出現(xiàn)死鎖,鎖競爭概率,并發(fā)性拷泽,性能均位于表鎖和行鎖之間 4k一頁
事物:
事物就是一組原子性的sql查詢,或者說一個獨立的工作單元订晌。如果數(shù)據(jù)庫引擎能夠成功的對數(shù)據(jù)庫應用該組查詢的全部語句锈拨,那么執(zhí)行該組查詢。如果其中任何一條語句應為崩潰或其他原因無法執(zhí)行,那么所有的語句都不會執(zhí)行萌焰。也就是說谷浅,事物內(nèi)的語句,要么全部執(zhí)行成功一疯,要么全部執(zhí)行失敗墩邀。良好的事物必須滿足四大特性
事物的四大特性:
原子性(Atomicity)
一個事物中的sql,要么全部執(zhí)行荔茬,要么全部不執(zhí)行
一致性(Consistency)
一個事物執(zhí)行前后竹海,數(shù)據(jù)庫中的所有約束依然滿足
隔離性(lsolation)
一個事物執(zhí)行過程中站削,數(shù)據(jù)不受另一個事物的影響
持久性(Durability)
一個事物執(zhí)行完成后,事物對數(shù)據(jù)的修改必須持久化到數(shù)據(jù)庫中
隔離級別:
隔離性其實比想象的復雜许起,在sql標準中定義了四中隔離級別,每一種級別都規(guī)定了一個事物中所做的修改惦积,那些事物內(nèi)和那些事物間是可見的猛频,那些是不可見的蛛勉。較低級別的隔離通常是可以執(zhí)行更高級的并發(fā)诽凌,系統(tǒng)的開銷也更低
*READ UNCOMMITED(未提交讀):事物中修改的坦敌,即使沒有提交對其他事物也都是可見的
*REDA COMMITTED(已提交讀/不可重復讀):事物重開始到提交之前所做的事情對其他事物都是不可見的
*REPEATABLE READ(可重復讀):同一事物多次讀取同樣的記錄結(jié)果是一直的,MySql默認
*SERIALIZABLE(序列化):事物串行執(zhí)行