![]()
一些朋友和我討論某個數據庫產品,一旦說起來,我第一時間就會想一下這個數據庫產品的存儲引擎的特點是什么。存儲引擎是數據庫的所有外在能力的基礎,雖然SQL引擎對外表現出各種各樣的兼容性和相似性,不過沒有存儲引擎這個內在的引擎支撐,一些特性也僅僅是特性而已,并不能真正的成為能力。
從廣義上看,數據庫的存儲引擎是數據庫管理系統中用于處理不同類型的存儲任務和管理數據的核心組件。它負責數據的存儲、檢索、更新和刪除等操作。不同的存儲引擎具有不同的特點和性能,以滿足各種應用場景的需求。存儲引擎是數據庫的核心組件,存儲引擎的一些特性決定了數據庫的一些基本性能特性。決定存儲引擎技術能力的因素不只是取決于底層數據的組織方式,作為數據庫中的量大核心引擎之一,從廣義上講,存儲引擎的主要作用包括:
數據存儲:將數據物理地存儲在磁盤或其他存儲介質上。
數據檢索:根據查詢條件快速高效地檢索數據。
數據更新:處理數據的插入、更新和刪除操作。
事務管理:保證數據的一致性和完整性,通過支持事務實現原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),即ACID屬性。
并發控制:在多個用戶并發訪問時保證數據的一致性和完整性。
數據備份和恢復:支持數據的備份和恢復,保障數據的安全性。
從上面的存儲引擎在數據庫中負責的功能上,我們可以看出,幾乎所有的數據庫的特性,特別是性能方面的特性都是與存儲引擎相關的。很多數據庫從出娘胎的時候就已經決定了其性能的上限。這也是我在《實戰國產數據庫》這本書里不厭其煩地介紹主流國產數據庫存儲引擎特點的主要原因,希望大家能夠通過對國產數據庫存儲引擎的理解,了解這些數據庫的長處和短處。
如果說有個數據庫在外在形式上具有類似Oracle RAC的功能,但是其存儲引擎的MVCC特性就已經決定了CACHE FUSION的性能,UNDO是按BLOCK的還是按行的?臟塊是否存在PI階段?全局資源鎖是如何高效降級的?這些特性都是與存儲引擎密切相關的。如果存儲引擎都無法高效地解決這些問題,那么你告訴我這個數據庫產品RAC方面的性能直逼O記,我是無論如何都不會相信的,因為這違背了客觀規律。
分布式數據庫在很多互聯網應用特性上很強,不過其存儲引擎是分布式的,事務管理的成本極高,在分布式環境中資源管理也復雜很多。在集中式數據庫上,一條SQL緩慢地長時間運行,頂多就是消耗一些系統資源,只要系統總體資源很充足,危害也是有限的。而到了分布式數據庫上,因為其分布式存儲引擎的特性,這種SQL的危害性會被放大一個甚至幾個數量級。在很多分布式數據庫上,設置一個超時失敗就是一種權衡后的結果。這個超時參數默認很小,你也可以把它設得很大,但是其帶來的風險也是巨大的。最好的處置方式是修改一下你的應用,讓SQL的執行時間不要那么長。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.