概述:

1。資料庫簡介:資料庫型別、資料庫排名、資料庫發展、資料庫架構

2。資料庫管理:DBMS、事務管理ACID、安全管理、備份恢復、多副本部署

3。分散式資料庫:部署架構、分庫分表、分散式事務

4。NoSQL資料庫簡介、CAP與BASE理論、NoSQL資料庫框架​

1.

資料庫簡介

1.1

資料庫型別

資料庫就是透過特定的資料模型進行資料的組織儲存、訪問處理與管理應用的倉庫。如圖1,資料模型由資料結構、資料操作與資料約束三部組織,其中資料結構是資料模型的核心,也是決定資料庫型別關鍵。

雲資料庫原理介紹

圖1:資料型別組成部分

基於不同的資料模型,資料庫主要分為關係型和非關係型。關係型資料庫採用二維關係表組織和儲存資料,採用統一的SQL查詢語言,支援事務處理的ACID特性,資料結構化高,冗餘度低;分為傳統關係型、分散式關係型,以及整合SQL和NoSQL優勢同時支援OLTP與OLAP系統的NewSQL。

雲資料庫原理介紹

表1:常用的關係型資料庫

1.2

資料庫排名

DB-Engines Ranking按月對全球資料庫流行度進行綜合評估與排名,評估指標主要包括:搜尋引擎、社交網路上的查詢討論情況;Google Trends分析的興趣度;專業網站上的技術檔案或討論頻率;相關的工作招聘資訊等。表2截取了該排名的Top 40,可以看到關係型資料庫應用非常廣泛,其中老牌的商用關係型資料庫Oracle、SQL Server與DB2排在前列,在企業應用佔大量的份額。而開源的MySQL與PostgreSQL排在第2、4位。非關係型資料庫中,MongoDB、ES與Redis排進了前十。

雲資料庫原理介紹

圖2:資料庫流行度排名(2020。03)

1.3 資料庫發展

如表2,資料庫發展主要經歷了幾個階段,單機關係型(SQL)、分散式關係型(中介軟體)、分散式非關係型(NoSQL)、分散式關係型(NewSQL),以及雲原生資料庫。

雲資料庫原理介紹

表2:資料庫發展階段

1.4

資料庫系統架構

關係型資料庫的系統架構比較相似,圖3展示了MySQL系統架構,主要分為三大功能模組:客戶端的資料庫訪問介面、伺服器端的SQL引擎模組與儲存引擎模組。

雲資料庫原理介紹

圖3:MySQL資料庫系統架構

Client端:

1)

資料庫訪問介面:客戶端透過不同語言的資料庫訪問介面,如ODBC、JDBC來連線資料庫,發起SQL操作。

SQL引擎負責連線管理、SQL語句分發與解析、執行計劃最佳化、提供快取與緩衝區、訪問控制等功能。主要元件如下:

2)

初始化:MySQL Server啟動時執行各種資源(Cache、Buffer等)、系統變數與儲存引擎的初始化設定。

3)

連線管理/執行緒管理:連線池監聽和接收客戶端請求,轉發到目標模組處理。每個連線都會分配對應的執行緒,建立兩端的通訊,接收命令,並返回結果。

4)

使用者管理與訪問控制:使用者管理負責使用者連線許可權控制和授權管理。訪問控制根據使用者認證、授權,以及資料庫各種約束,控制使用者對資料的訪問操作。

5)

解析器Parser:對SQL語句進行語義/語法解析,生成SQL_ID,按不同操作型別分發

6)

查詢快取Query Cache:將select請求的返回結果快取到到記憶體中,與該查詢的Hash值一一對應,基表更改時對應的快取值失效,用於提升查詢效能。

7)

最佳化器Optimizer:對Client的查詢請求與資料庫統計資訊行分析,得出一個最優的SQL語句執行策略。

8)

SQL介面模組:表變更模組負責完成DML和DDL操作,如:update、delete、insert、create table,alter table等。表維護模組負責表的狀態檢查,錯誤修復,以及最佳化和分析等。複製模組分為Master模組和Slave模組,負責MYSQL主從複製。

9)

系統狀態管理:在客戶端請求系統狀態時,如showstatus,show variables,返回各種狀態資料返回給使用者。

10)

表管理器:維護MySQL表定義檔案,快取表結構資訊,管理table級別的鎖

11)

日誌記錄:負責整個系統級別的邏輯層日誌記錄,包括error log, binary log, show query log等。

12)

核心API:提供需高效處理的底層操作的最佳化實現,包括底層資料結構、特殊演算法、字串/數字處理,小檔案IO,格式化輸出與記憶體管理等。

13)

網路/協議互動:負責底層網路資料的接收與傳送,供其他模組呼叫。協議互動模組實現客戶端與MySQL互動過程中的基於OS、TCP/IP的協議。

14)

管理工具:實現系統配置管理、備份恢復、安全設定、遷移同步等。

15)

快取/緩衝區:提供查詢快取、所有快取、元資料和統計資訊快取

16)

儲存引擎介面:將各種資料庫處理高度抽象化,實現底層資料儲存引擎外掛式管理。

17)

儲存引擎模組:負責資料存取操作實現。MySQL預設儲存引擎是InnoDB, 同時支援其他多種外掛式的儲存引擎,如MyISAM、NDB、Memory等。

2.

資料庫管理

2.1

資料庫管理系統DBMS

如圖4,資料庫運維管理軟體DBMS主要分為三層,語言解析層、資料控制層、儲存管理層,提供資料庫執行服務引擎,以及各種基於介面或命令列的資料管理功能與工具。其主要功能如下:

雲資料庫原理介紹

圖4:資料庫管理系統DBMS

1)

資料庫定義:透過DDL提供資料庫物件建立與修改。如CREATE TABLE/INDEX等;

2)

資料庫查詢:透過DQL實現資料庫查詢讀取。如 SELECT xx FROM xx WHERE xx。

3)

資料庫控制:透過DCL授予或回收訪問資料庫的某種特權,控制資料庫操縱事務發生的時間及效果。如 GRANT、COMMIT、ROLLBACK。

4)

資料庫操縱:透過DML對資料庫物件更新/修改。如INSERT、UPDATE、DELETE。

5)

資料庫組織儲存:資料庫檔案組織、資料分割槽儲存、索引、緩衝區與儲存路徑管理等。

6)

資料庫運維管理:資料庫系統監控、日誌管理、資料匯入匯出、訪問控制、效能最佳化。

7)

資料庫同步遷移:資料庫多副本的同步遷移、備份恢復管理等。

2.2 事務ACID與管理

在關係型資料庫中,事務(Transaction )實現特定功能的一組邏輯獨立的資料庫操作,是DBMS系統任務執行、恢復與併發控制的最小單元。事務支援4個重要特性ACID透過DBMS日誌管理、鎖機制、併發控制等實現。

1)

原子性(Atomicity):事務中的操作不可分割,要麼全部成功執行,要麼全部不執行。

2)

一致性(Consistency):並行執行的事務,其結果與按某一順序序列執行的結果一致。

3)

隔離性(Isolation):事務執行不受其他事務干擾,執行的中間結果對其他事務透明。

4)

永續性(Durability):已提交事務對資料庫改變是永久的,即使出現故障也不會丟失。

在資料庫中需要對多個事務進行併發執行與控制以提升系統性能與資源利用率。為了保障併發事務ACID,需要透過事務管理器與併發控制器來保障事務隔離級別,實現表3中的可序列化排程,主要採用基於鎖併發控制機制。鎖機制就是在執行CRUD操時,透過資源鎖定禁止其他資料訪問共享資料,分為排他鎖(Lock-X,禁止操作)、共享鎖(Lock-S,可讀)。需要根據資料庫效能與管理複雜度等因素來評估加鎖的粒度(資料庫、表、頁面、行)。DBMS通常按照兩階段鎖協議(增長、縮減)對共享資料進行加鎖或解鎖。同時,系統中存在較多併發事務,需要採用超時撤銷或基於事務鎖等待圖主動檢測的機制,來發現系統出現死鎖,並及時撤銷死鎖上的某些事務及時消除死鎖。

雲資料庫原理介紹

表3:資料庫隔離級別

2.3 資料庫安全管理

如圖5,資料庫安全保障涉及使用者、堡壘機、DBMS和資料庫等多個層次,防止資料的機密性、完整性和可用性受到破壞。可以採用多維度的安全措施,如賬號安全、身份認證、許可權管理、訪問控制、操作審計、資料加密與脫敏,以及備份恢復,多副本容災部署等。

雲資料庫原理介紹

圖5:資料庫安全機制

2.4 資料庫備份恢復

資料庫備份恢復、多副本與容災部署機制是資料庫可靠性與可用性的重要保障,如圖6,MySQL資料庫3種備份方案:1)物理備份,使用Xtrabackup備份資料庫的二進位制檔案,支援全量備份與增量備份;2)邏輯備份,採用Mydumper備份資料庫的庫表邏輯結構與資料;3)Binlog備份,實時或準實時備份資料庫的變更操作日誌。在進行資料庫恢復時,通常採用最近的物理全量備份,加上binlog備份來實現基於時間點的恢復。如果需要恢復某些具體的資料庫或表文件,可以採用基於邏輯備份的實現庫表級的邏輯回檔。

雲資料庫原理介紹

圖6:資料庫備份方案

2.5 多副本容災部署

如圖7,資料庫支援一主多從。基於效能、資料一致性等因素主副本與從副本可採用三種複製方式:1)非同步複製,資料寫到主副本之後直接返回應用(步驟1、2),應用端不關心資料是否成功同步到從副本(步驟3、4);該方案快速返回效能較好,但主從副本一致性上存在挑戰。2)同步複製,資料寫入主副本後,需要同步到從副本(步驟1、2),等至少有一個從副本返回成功後,主副本再返回應用(步驟3、4);該方案資料一致性有保障,但效能相比非同步複製差一些。半同步複製結合非同步和同步複製,正常情況下采用同步複製,當系統響應超時或發生異常時可以退化為非同步複製。

雲資料庫原理介紹

圖7:資料庫複製方式

為了滿足金融等行業核心系統與資料跨IDC或跨地域容災的需求,資料庫支援同城多中心,兩地三中心的高可用部署。如圖8,同城雙中心部署時,資料庫支援5個層次(負載均衡、管理排程系統、SQL引擎、核心資料、資料備份)的元件跨IDC部署。資料庫多個副本之間的可以基於PAXOS或RAFT協議實現分散式一致性。圖中一個例項分為多個副本,部署在不同的IDC,副本之間可以設定為同步或非同步複製方式。當主副本故障時,還可以自動發起新的主副本選舉,實現業務應用透明的秒級主從切換。如果需要兩地三中心部署,可在異地在部署一套資料庫叢集,考慮時間延遲的影響,可採用非同步複製實現跨地域資料同步。

雲資料庫原理介紹

圖8:資料庫同城雙中心部署

3. 分散式資料庫

3.1 部署架構

如圖9,資料庫部署架構分為三個階段,第一階段屬於單機部署,資料庫引擎與儲存都在同一臺機器。業務負載較高時,對資料庫的容量、效能與可靠性面臨挑戰。第二階段實現計算與儲存分離,資料庫節點分開部署,然後共享專用的SAN儲存,傳統的關係型資料庫主要採用這種部署方式,如Oracle RAC等,在大規模高併發的場景,該架構在效能,擴充套件與成本上也面臨一些挑戰。第三階段,分散式架構,透過分庫分表,讓不同的資料庫/表分散到獨立的物理節點上處理儲存,實現高效能、高併發以及業務透明的彈性擴容。

雲資料庫原理介紹

圖9:資料庫部署架構

3.2 分庫分表

如圖10,集中式資料庫將所有資料放在一個庫中部署在單機上,可以採用分庫分表機制實現效能與容量的線性擴充套件。分庫就是垂直拆分,基於業務功能將不同的資料儲存在不同的資料庫,應用需要從不同的庫讀寫對應的資料。分表就是水平拆分,將一個邏輯上完整的資料庫/表拆分成不同的分片、分散在不同的物理節點上處理和儲存,處理結果再彙總反饋到應用端,水平拆分的過程對應用透明。部分廠商還是支援二級分割槽功能,將邏輯上完整的一張大表分散在不同的物理節點上處理和儲存。

雲資料庫原理介紹

圖10:資料庫分庫分表

3.3 分散式事務

單節點的事務一致性由資料庫儲存引擎(如InnoDB)保障。多節點的分散式事務一致性涉及網路通訊、節點狀態與各種場景,處理相對複雜。如圖11,業界通用的實現是基於開源的XA事務、2PC兩階段提交協議以及全域性事務管理器TM來實現。SQL引擎上的全域性事務管理器負責事務狀態同步與任務發起。準備階段:事務啟動時GTM向各節點上的RM發起Prepare請求,各節點準備就緒後返回確認到GTM;提交階段:GTM向各節點發起提交請求,各節點開始提交事務並返回結果;各節點都提交成功則事務執行成功,如果其中某個節點出現異常則可能觸發事務重試或回滾。

雲資料庫原理介紹

圖11:分散式事務處理

4. NoSQL資料庫簡介

4.1 CAP與BASE理論

NoSQL資料庫主要應用於分散式、高併發、高擴充套件、非結構化、表結構靈活變更、海量資料分析等關係型資料庫不太適合的場景。如圖12,與關係型資料庫保障事務ACID特性不同,NoSQL通常採用CAP或BASE理論。

雲資料庫原理介紹

圖12:NoSQL資料庫CAP與BASE理論

CAP理論

指在一個分散式系統中不能同時滿足三個核心要求:一致性、可用性和分割槽容錯性,最多隻能同時滿足其中兩項。所以NoSQL資料庫主要基於業務需求在一致性和可用性上找到平衡,有時為了保障一致性,在效能和擴充套件性上有一定妥協;或為了保障高效能,在一致性上有所妥協。

1) 一致性(Consistency):執行某項資料修改後,系統所有節點的資料保持一致。

2) 可用性(Availability):每個請求都能及時地得到合適的處理響應。

3) 分割槽容錯性(Partition tolerance):系統中部分元件或節點異常或系統被隔離為多個孤立的區域後,不影響整體系統的可用性。

按照BASE理論實現的系統不保障強一致性,在處理請求過程中可能處於臨時的中間狀態,出現短暫的資料不一致;系統會記錄這些臨時中間狀態,當系統故障時可以從這些中間狀態繼續執行未完成的請求或回退到原始狀態達到系統的最終一致性。BASE包括3要素:

1) BA:Basically Available(基本可用):系統能夠正常執行,持續提供服務

2)Softstate(軟狀態/柔性事務):系統不要要求一致保持強一致狀態,存在一些臨時的中間狀態和不一致視窗。

3)Eventuallyconsistent(最終一致性):系統採取機制保障系統能夠達到最終一致性。

NoSQL資料庫具有一些通用的特徵:如Schema-free,不用預先定義資料模式與表結構等;Share-nothing無共享架構;資料分割槽,彈性擴充套件;基於日誌的非同步複製;簡單的資料型別;元資料和應用資料分離;BASE理論。

4.2 NoSQL資料庫簡介

非關係型資料庫採用多種資料結構與查詢語言,跟進資料儲存型別和特點,鍵值型資料庫、文件型資料庫、列儲存資料庫、圖資料庫與時序資料庫等;主要特徵是對事務支援較弱,支援CAP或BASE理論,比較適合非結構化資料、高擴充套件、高併發、大資料分析、資料搜尋等場景。

雲資料庫原理介紹

表4:常用NoSQL資料庫

4.3 NoSQL資料庫框架

不同型別的NoSQL資料庫系統架構各不相同,但邏輯框架如圖13所示,主要分為訪問介面層、資料模型層、資料分佈層和資料持久層。

雲資料庫原理介紹

圖13:NoSQL資料庫邏輯框架

參考文件:《資料庫系統原理、設計與程式設計》

相關閱讀: