![]()
一些朋友和我討論某個(gè)數(shù)據(jù)庫(kù)產(chǎn)品,一旦說(shuō)起來(lái),我第一時(shí)間就會(huì)想一下這個(gè)數(shù)據(jù)庫(kù)產(chǎn)品的存儲(chǔ)引擎的特點(diǎn)是什么。存儲(chǔ)引擎是數(shù)據(jù)庫(kù)的所有外在能力的基礎(chǔ),雖然SQL引擎對(duì)外表現(xiàn)出各種各樣的兼容性和相似性,不過(guò)沒(méi)有存儲(chǔ)引擎這個(gè)內(nèi)在的引擎支撐,一些特性也僅僅是特性而已,并不能真正的成為能力。
從廣義上看,數(shù)據(jù)庫(kù)的存儲(chǔ)引擎是數(shù)據(jù)庫(kù)管理系統(tǒng)中用于處理不同類型的存儲(chǔ)任務(wù)和管理數(shù)據(jù)的核心組件。它負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)、檢索、更新和刪除等操作。不同的存儲(chǔ)引擎具有不同的特點(diǎn)和性能,以滿足各種應(yīng)用場(chǎng)景的需求。存儲(chǔ)引擎是數(shù)據(jù)庫(kù)的核心組件,存儲(chǔ)引擎的一些特性決定了數(shù)據(jù)庫(kù)的一些基本性能特性。決定存儲(chǔ)引擎技術(shù)能力的因素不只是取決于底層數(shù)據(jù)的組織方式,作為數(shù)據(jù)庫(kù)中的量大核心引擎之一,從廣義上講,存儲(chǔ)引擎的主要作用包括:
數(shù)據(jù)存儲(chǔ):將數(shù)據(jù)物理地存儲(chǔ)在磁盤或其他存儲(chǔ)介質(zhì)上。
數(shù)據(jù)檢索:根據(jù)查詢條件快速高效地檢索數(shù)據(jù)。
數(shù)據(jù)更新:處理數(shù)據(jù)的插入、更新和刪除操作。
事務(wù)管理:保證數(shù)據(jù)的一致性和完整性,通過(guò)支持事務(wù)實(shí)現(xiàn)原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),即ACID屬性。
并發(fā)控制:在多個(gè)用戶并發(fā)訪問(wèn)時(shí)保證數(shù)據(jù)的一致性和完整性。
數(shù)據(jù)備份和恢復(fù):支持?jǐn)?shù)據(jù)的備份和恢復(fù),保障數(shù)據(jù)的安全性。
從上面的存儲(chǔ)引擎在數(shù)據(jù)庫(kù)中負(fù)責(zé)的功能上,我們可以看出,幾乎所有的數(shù)據(jù)庫(kù)的特性,特別是性能方面的特性都是與存儲(chǔ)引擎相關(guān)的。很多數(shù)據(jù)庫(kù)從出娘胎的時(shí)候就已經(jīng)決定了其性能的上限。這也是我在《實(shí)戰(zhàn)國(guó)產(chǎn)數(shù)據(jù)庫(kù)》這本書里不厭其煩地介紹主流國(guó)產(chǎn)數(shù)據(jù)庫(kù)存儲(chǔ)引擎特點(diǎn)的主要原因,希望大家能夠通過(guò)對(duì)國(guó)產(chǎn)數(shù)據(jù)庫(kù)存儲(chǔ)引擎的理解,了解這些數(shù)據(jù)庫(kù)的長(zhǎng)處和短處。
如果說(shuō)有個(gè)數(shù)據(jù)庫(kù)在外在形式上具有類似Oracle RAC的功能,但是其存儲(chǔ)引擎的MVCC特性就已經(jīng)決定了CACHE FUSION的性能,UNDO是按BLOCK的還是按行的?臟塊是否存在PI階段?全局資源鎖是如何高效降級(jí)的?這些特性都是與存儲(chǔ)引擎密切相關(guān)的。如果存儲(chǔ)引擎都無(wú)法高效地解決這些問(wèn)題,那么你告訴我這個(gè)數(shù)據(jù)庫(kù)產(chǎn)品RAC方面的性能直逼O記,我是無(wú)論如何都不會(huì)相信的,因?yàn)檫@違背了客觀規(guī)律。
分布式數(shù)據(jù)庫(kù)在很多互聯(lián)網(wǎng)應(yīng)用特性上很強(qiáng),不過(guò)其存儲(chǔ)引擎是分布式的,事務(wù)管理的成本極高,在分布式環(huán)境中資源管理也復(fù)雜很多。在集中式數(shù)據(jù)庫(kù)上,一條SQL緩慢地長(zhǎng)時(shí)間運(yùn)行,頂多就是消耗一些系統(tǒng)資源,只要系統(tǒng)總體資源很充足,危害也是有限的。而到了分布式數(shù)據(jù)庫(kù)上,因?yàn)槠浞植际酱鎯?chǔ)引擎的特性,這種SQL的危害性會(huì)被放大一個(gè)甚至幾個(gè)數(shù)量級(jí)。在很多分布式數(shù)據(jù)庫(kù)上,設(shè)置一個(gè)超時(shí)失敗就是一種權(quán)衡后的結(jié)果。這個(gè)超時(shí)參數(shù)默認(rèn)很小,你也可以把它設(shè)得很大,但是其帶來(lái)的風(fēng)險(xiǎn)也是巨大的。最好的處置方式是修改一下你的應(yīng)用,讓SQL的執(zhí)行時(shí)間不要那么長(zhǎng)。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.