GBase新聞
GBASE金融應用指南5 | 系統開發規范
為幫助金融機構做好分布式分析型數據庫產品的選型,推廣在金融行業部署應用分布式分析型數據庫的成功經驗,GBASE南大通用在北京金融科技產業聯盟的指導下編寫《南大通用GBase 8a金融應用指南》。《指南》深入介紹了分布式分析型數據庫從選型規劃、開發設計規范、數據安全高可用,直至運維優化的部署全過程,并介紹了GBase 8a MPP Cluster在國家政策性銀行和國有大行的代表性部署案例。
GBASE南大通用將陸續推出系列文章,分享解讀《指南》內容,希望能夠對廣大金融用戶的數據庫選型提供借鑒幫助,助力科技金融的高效實施和高質量發展。
本篇是系列文章的第5期,介紹系統的開發規范。
一、模型設計
GBase 8a產品中提供了多種數據分布策略,如果選擇不當后期更改,需要重新建表和導入數據,代價較大。同樣,表模型確定后,如果后期要更改結構,也可能會影響到上層的應用變動,代價都較大。模型設計也是項目建設中耗時較長的階段,需要很好的理解業務,在業務人員和技術人員的良好溝通下共同確定。
1.數據模型
維度模型
GBase 8a產品是關系數據庫管理系統,在關系數據庫管理系統中實現的維度模型常見有以下三種:
? 星型模型:所有維度表都直接連接到事實表上,為了提高查詢性能,會在維度表和事實表之間添加冗余數據,適用于查詢性能要求較高的場景。
? 雪花模型:星型模型的擴展,維度表進一步層次化,部分維度表通過其他維度表連接到事實表上,消除了冗余數據,減少數據存儲量。適用于存儲空間有限、需要節省成本、且對查詢性能要求相對較低的場景
? 星座模型:星型模型的擴展,有多個事實表,一個維度表被多個事實表使用。適用于數據和需求需要多個事實表的場景。
2.數據分布策略
GBase 8a產品支持的數據分布模式有復制分布、hash分布、隨機分布三種模式,分別對應三種表類型:復制表、hash分布表、隨機分布表。在模型設計階段提前確定好每個表的類型,創建表時根據設計好的類型進行創建。
? 復制表:8a集群每個節點上都存儲的是表中全量數據。適用于維度表或者數據量較小的表。優勢為便于關聯運算時不需跨節點拉取數據。
? Hash分布表:8a集群每個節點上存儲的是表的部分數據。需要在建表時選擇hash分布列來控制分布到各節點的數據。適用于事實表或者數據量大的表,可以避免熱數據傾斜在集群中個別節點帶來的性能下降。
? 隨機分布表:8a集群每個節點上存儲的是表的部分數據。數據隨機且均勻的分布于集群各節點,無法控制。可用于事實表或者數據量大的表,因無法控制數據分布所以也無法避免個別節點熱查數據多的問題,項目上較少使用。
3.數據壓縮算法
GBase 8a產品對庫內底層數據壓縮存儲,并提供多種壓縮模式供用戶選擇,這些壓縮算法能將原始數據壓縮到3:1至20:1,這取決于業務數據特點選擇的壓縮算法。
? 壓縮比高,數據占用磁盤空間相對小,壓縮和解壓耗時相對會長一些;
? 壓縮比低,數據占用磁盤空間相對大,壓縮和解壓耗時相對會短一些;
? 用戶需根據實際硬件條件和業務性能要求均衡選擇合適的壓縮模式。
GBase 8a的壓縮算法支持全局、庫級、表級的設置,如果同時設置,壓縮級別的優先級為列級定義壓縮 >表級定義壓縮 >全局定義壓縮方式。
4.字符集
GBase 8a產品當前支持的字符集有utf8、utf8mb4、gbk、gb18030-2022。
GBase 8a產品使用時字符集轉換流程如圖1所示。
圖1字符集轉換流程
字符集流轉流程中建議編碼一致,GBase 8a Server的字符集對以下使用會有一定影響:
? 字符型數據類型的字符上限,不同編碼上限有差異;
? 庫內數據的比較排序有差異;
不同字符集排序規則如表1所示。
表1 不同字符集排序規則
二、SQL編寫規范
GBase 8a產品自身的SQL執行引擎和優化器具有一些特性,以下的SQL編寫規范能夠更好地利用GBase 8a產品的特性,發揮GBase 8a產品的性能優勢。
1.GBase 8a標識符規范:
1)標識符是一個限制詞或包含特殊字符,必須用` `引用它,比如:SELECT * FROM `select`.id>100;
2)如果標識符長度超過最大長度限制,數據庫、表、列、視圖、存儲過程的命令將報錯,推薦sql中使用有意義的別名;
3)GBase 8a默認表名列名不支持中文名,如需支持中文名的列名表名需設置參數;
4)復制表的表名不能以_n[N]結尾,[N]為數字。
2.SQL編寫規范:
GBase 8a產品的SQL遵循SQL 92標準(ANSI X3.135-1992,ISO/IEC 9075:1992),支持SQL99 和 SQL2003 中定義的大部分數據類型(ISO/IEC 9075:1999,SQL:1999(SQL3)和 ISO/IEC 9075:2003,SQL:2003(SQL4))。
GBase 8a產品的SQL特性:
1)集群表類型中區分分布表、復制表、臨時表,sql建表有關鍵字標識;
2)每條SQL命令默認以分號 ; 表示結束,可使用DELIMITER進行修改:
DELIMITER 限定符(在存儲過程中必須更換);
3)SQL執行默認為自動提交commit;
4)HASH分布字段不支持日期時間類型;
5)支持修改varchar字段長度定義,支持修改表字符集從utf8到utf8mb4;
6)釋放空間sql:SHRINK SPACE不適宜頻繁執行;
7)禁止對視圖進行INSERT、UPDATE和DELETE 操作;
8)INSERT 支持標準sql語法及擴展寫法,其中insert into t values(v1,…vn), (v2,…vn),…(vm,…vn)為批量提交,性能佳;
9)UPDATE 不支持更新distributed by定義列的值。不支持多表數據的同時更新,但是update語法中可以進行多表關聯操作,只能更新其中一張表的數據。支持快速更新模式;
10)DELETE 不支持多表批量刪除;
11)MERGE操作只支持HASH分布表且MERGE語句的條件需包含業務主鍵和HASH分布列;
12)自定義函數內不支持DML,DDL,創建臨時表;
13)單表列數上限2000列,單表列寬總和上限300,000字節,單表索引總數上限64。
3.開發接口使用
GBase 8a集群提供主流開發平臺的接口驅動,集群接口驅動可以有效實現對上層應用請求的高可用和負載均衡(應用調用接口驅動的連接串中配置多個集群管理節點的IP,接口驅動的內部進行連接的高可用和負載均衡)。
可以根據需要選擇如下合適的接口:GBase ADO.NET、GBase JDBC、GBase ODBC、GBase C-API、GBase Python。
GBase 8a 接口有如下特性,用戶可以根據需要選擇使用。
? 使用接口執行加載sql,可以通過接口返回的加載信息判斷加載的結果;
? JDBC提供數據攢批接口,使用JDBC向集群插入數據較多時,可以使用接口的批量插入參數,一次性批量發送數據給服務端,減少網絡傳輸,同時server端可一次性處理發來的SQL,實現性能的提升;
? 查詢的結果集比較大時,可使用接口的流式讀取功能,流式讀取可以通過數據流的方式,逐條從集群獲取數據,減小大結果集對應用內存的影響。流式讀取會在集群端生成一個臨時表,占用臨時表空間,且結果集內的數據未消費完時連接一直保持,開啟流式讀取對集群有一定影響,使用時需謹慎;
? 應用使用接口連接8a集群,要求安全等級較高時,可根據需要使用接口的SSL加密傳輸、Kerberos認證連接、SSH隧道連接等安全功能。
4.數據庫管理規范
? GBase 8a數據庫不適合OLTP事務類型的應用;
? GBase 8a集群內部支持UTF8和GBK字符集的混用,可以同時使用UTF8和UTF8MB4字符集,或GBK和GB18030字符集;
? 應按照數據倉庫的開發建設原則,對數據模型進行規范化;
? 開發環境和生產環境分開;
? 構建合理的任務調度機制,在滿足業務要求的情況下盡量降低數據庫并發;
? 正式上線前,進行性能評估測試。