分散式資料庫架構原理 - Alex Petrov
Alex Petrov 是 Apple 的一名軟體工程師。他寫了一本關於 Database Internals 的精彩書籍,深入探討了分散式資料系統的工作原理。
我們將總結他關於資料庫管理系統 (DBMS) 背後架構的書中的一小段內容。
概括
您可能使用過像 Postgres、MySQL 等這樣的 DBMS。
它們提供了一個非常有用的抽象,您可以在應用程式中使用它來儲存和(以後)檢索資料。
所有 DBMS 都提供了一個 API,您可以透過某種型別的查詢語言使用該 API 來儲存和檢索資料。
它們還圍繞如何儲存/檢索這些資料提供了一組保證。這種保證的幾個例子是
- 耐用性- 保證在 DBMS 崩潰時您不會丟失任何資料
- 一致性- 寫入資料後,所有後續讀取是否總是給出資料的最新值?(這對於分散式資料庫很重要)
- 讀/寫速度- IOPS是儲存裝置上每秒輸入和輸出操作的標準度量。
各種資料庫管理系統的體系結構根據它們的保證和設計目標而有很大差異。為OLTP使用而設計的資料庫的設計方式與為OLAP設計的資料庫不同。
記憶體 DBMS(主要將資料儲存在記憶體中並使用磁碟進行恢復和日誌記錄)的設計也將不同於基於磁碟的 DBMS(主要將資料儲存在磁碟上並使用記憶體進行快取)。
但是,資料庫在其各種架構中都有一些共同的主題,瞭解這些主題可以為它們的工作方式提供有用的模型。
下圖可以描述一般架構。
資料庫管理系統使用客戶端/伺服器模型。您的應用程式是客戶端,DBMS 是伺服器(託管在同一臺機器上或不同的機器上)。
傳輸系統Transport是 DBMS 接受客戶端請求的方式。
客戶端請求以資料庫查詢的形式出現,通常以某種型別的查詢語言(例如 SQL)表示。
收到查詢後,傳輸系統會將查詢傳遞給查詢處理器。
查詢處理器將首先解析查詢(例如使用抽象語法樹)並確保它是有效的。
檢查有效性意味著確保查詢有意義(所有命令都被識別,訪問的資料是有效的,等等),並且客戶端被正確地允許訪問/修改他們請求的資料。
如果查詢無效,則資料庫將向客戶端返回錯誤。
否則,解析後的查詢將傳遞給查詢最佳化器。
最佳化器將首先消除查詢的冗餘部分,然後使用內部資料庫統計資訊(索引基數、近似交集大小等)來找到執行查詢的最有效方式。
對於分散式資料庫,最佳化器還將考慮資料放置,例如叢集中的哪個節點儲存資料以及與傳輸相關的成本。
最佳化器的輸出是描述執行查詢的最佳方法的執行計劃。該計劃也稱為查詢計劃或查詢執行計劃。
該執行計劃被傳遞給執行該計劃的執行引擎。
當您使用分散式資料庫時,執行計劃可能涉及遠端執行(對儲存在不同機器上的資料發出網路請求)。
否則,它只是本地執行(對本地儲存的資料執行查詢)。
遠端執行涉及叢集通訊,其中 DBMS 與資料庫叢集中的其他機器通訊並向它們傳送資料請求。如上圖所示,這是傳輸層的一部分。
本地執行涉及與儲存引擎對話以獲取資料。
儲存引擎是資料庫中直接負責在記憶體和磁碟中儲存、檢索和管理資料的元件。
儲存引擎通常提供一個簡單的資料操作 API(允許 CRUD 功能)幷包含有關如何運算元據的實際細節的所有邏輯。
儲存引擎的示例包括BerkeleyDB、LevelDB、RocksDB等。
資料庫通常允許您選擇正在使用的儲存引擎。
例如,MySQL 有多種儲存引擎可供選擇,包括 RocksDB 和 InnoDB。
儲存引擎由幾個元件組成
事務管理器- 負責建立事務物件並管理它們的原子性(整個事務成功或回滾)。
鎖管理器- 事務將同時執行,因此鎖管理器管理每個事務正在訪問的資料庫物件上的鎖(並在事務提交或回滾時釋放這些鎖)。
訪問方法- 這些管理訪問、壓縮和組織磁碟上的資料。訪問方法包括堆檔案和儲存結構,例如 B 樹。
緩衝區管理器- 此管理器將資料頁快取在 RAM 中,以減少對磁碟的訪問次數。
恢復管理器- 維護操作日誌並在發生故障時恢復系統狀態。
不同的儲存引擎在這些元件之間做出不同的權衡,從而導致壓縮、縮放、分割槽、速度等方面的效能不同。
相關文章
- (二) MdbCluster分散式記憶體資料庫——分散式架構1分散式記憶體資料庫架構
- 崑崙分散式資料庫架構介紹分散式資料庫架構
- 分散式資料庫的架構演變之路分散式資料庫架構
- 金融級分散式資料庫架構設計要點分散式資料庫架構
- HarmonyOS Next方舟資料管理與分散式資料庫實戰:構建高效同步架構分散式資料庫架構
- 分散式資料庫Google Spanner原理分析KP分散式資料庫Go
- 分散式資料庫的複製原理 - Quastor分散式資料庫AST
- MyCat 啟蒙:分散式系統的資料庫架構演變分散式資料庫架構
- 資料管理架構:單體資料架構與分散式資料網格比較 - enyo架構分散式
- 資料庫分散式事務的實現原理!資料庫分散式
- (一) MdbCluster分散式記憶體資料庫——基礎架構介紹分散式記憶體資料庫架構
- 分散式資料庫分散式資料庫
- OceanBase 首席架構師:關聯式資料庫到三代分散式資料庫,我親歷的資料庫演進史架構資料庫分散式
- 存算分離是否成為開源分散式資料庫主流架構?分散式資料庫架構
- 分散式架構篇 | 如何在分散式架構下完美實現“全域性資料一致性”?分散式架構
- 分散式WebSocket架構分散式Web架構
- DTCC演講 | PolarDB-X技術架構:雲原生分散式資料庫架構分散式資料庫
- 分散式架構原理解析,Java開發必修課分散式架構Java
- 網易馬進:DDB從分散式資料庫到結構化資料中心的架構變遷分散式資料庫架構
- 阿里P8架構師進階心得:分散式資料庫架構MyCat學習筆記送給你阿里架構分散式資料庫筆記
- ES資料庫架構資料庫架構
- ClickHouse 分散式架構(qbit)分散式架構
- 分散式架構的概述分散式架構
- openGauss 分散式資料庫能力分散式資料庫
- MySQL資料庫分散式事務XA的實現原理分析MySql資料庫分散式
- 如何在微服務分散式架構中刪除資料? - bennorthrop微服務分散式架構
- 分析型資料庫:分散式分析型資料庫資料庫分散式
- 分散式資料庫 ZNBase 的分散式計劃生成分散式資料庫
- 首例“微服務+國產分散式資料庫”架構,TDSQL助力崑山農商行換“心”微服務分散式資料庫架構SQL
- 基於 Apache ShardingSphere 構建高可用分散式資料庫Apache分散式資料庫
- Java程式設計良心推薦——分散式架構原理解析Java程式設計分散式架構
- 分散式資料庫事務故障恢復的原理與實踐分散式資料庫
- Uber實時資料基礎設施:分散式計算架構分散式架構
- 分散式架構馭數而行,海量資料方能有備無患分散式架構
- 基於SpringCloud分散式架構SpringGCCloud分散式架構
- KAFKA介紹(分散式架構)Kafka分散式架構
- 《分散式資料庫HBase案例教程》分散式資料庫
- Meetup 報名 | 從資料庫到架構,OceanBase CTO 楊傳輝邀你聊透分散式資料庫架構分散式