GBase新聞
GBase 8c分布式核心技術初揭秘—在線擴容
隨著互聯網時代的發展,聯網業務高峰期間可能實時面臨高并發的訪問量。飛速增長的業務需求使得數據庫計算和存儲壓力急劇增大,負載峰值不斷攀升,將嚴重影響業務系統的正常訪問。為了解決此類問題,南大通用GBase 8c多模多態分布式數據庫增強了其在線擴容/縮容的能力。
在線擴容/縮容
GBase 8c因其優秀的在線擴容/縮容能力,能夠全面覆蓋用戶流量低高峰期的業務場景。用戶根據業務需求、策略等設置伸縮規則。在業務需求增長時,系統自動增加數據庫節點以保證計算存儲能力;在業務需求下降時,系統自動減少數據庫節點以節約成本。
擴容/縮容數據流圖
按照流程方式劃分,GBase 8c在線擴容/縮容可分為普通表、Hashbucket表兩種。默認創建普通表。普通表適合數據量小、數據文件有序的場景;Hashbucket表適合數據量大、數據文件繁雜、高并發的場景,在此類場景下,Hashbucket表的擴容縮容和查詢性能更優越。
以下分別簡述普通表和Hashbucket表在線擴容的原理。
普通表在線擴容原理
GBase 8c僅在數據重分布階段中表切換操作時,出現秒級或毫秒級的短暫下線。擴容其余時間內均支持業務在線。存儲節點擴容主要分為集群加節點、數據重分布兩個階段。
1. 集群加節點階段。此階段主要完成新節點的安裝、元數據同步、啟動等操作。
首先將新節點初始化并加到集群中,然后將老節點的元數據信息都同步到新節點中,為后續數據重分布階段做準備。在元數據同步后啟動、運行新節點,并切換Installation Group為新建的Node Group。
2. 數據重分布階段。此階段主要完成存儲節點擴容后數據的重分布,以及切換元數據。
首先在數據重分布之前,進行檢查新舊Node Group、創建臨時表和delete_delta表等準備工作。然后采用自研Hash數據分布算法,完成基線數據重分布操作,并追增擴容期間產生的業務數據,完成增量數據重分布。在最后一輪數據追增完成后,關閉數據追增模式,并完成表切換、刪除臨時列、更新Node Group等收尾操作。
HashBucket表在線擴容原理
此外,GBase 8c還支持創建HashBucket表。創建命令如下:
CREATE TABLE tab_name(rel_name rel_type) with(segment=on,bashbucket=on);
HashBucket表使用段頁式存儲方式,以解決數據文件多的問題。
每一個bucketid一段連續存儲,相同的bucketid存儲在相同文件。因此在線擴容/縮容進行數據搬遷時,僅需搬遷發生變化的bucketid對應的塊文件。在表切換、交換物理文件時,僅需在存儲結構進行修改。從而,數據搬遷量大大減少。
Hashbucket表擴容數據流圖
Hashbucket表擴容數據流圖如上所示。例如,擴容前,bucketid為1、2、3的數據存放在DN1節點,bucketid為4、5、6的數據存放在DN2節點。
擴容時,如果新節點不在原集群中,則需將新增的DN3加到集群中(如圖步驟①所示)。根據數據分布算法生成的新map,僅將bucketid為3、6的數據由老節點搬遷至新增的DN3節點(如圖步驟②所示),其他bucketid值的數據無需搬遷。由此看出,數據搬遷時只需移動發生變化的bucketid對應的數據,而非所有節點的數據重分布,減少擴容過程中的搬遷數據量,有效提高了擴容速率。
關于 GBase 8c
GBase 8c是基于openGauss3.0構建的一款多模多態的分布式數據庫,支持行存、列存、內存等多種存儲模式和單機、主備式、分布式等多種部署形態。GBase 8c具備高性能、高可用、彈性伸縮、高安全性等特性,可以部署在物理機、虛擬機、容器、私有云和公有云,為關鍵行業核心系統、互聯網業務系統和政企業務系統提供安全、穩定、可靠的數據存儲和管理服務。