GBase新闻

专注于数据库软件产品和服务,致力于成为用户最信赖的数据库产品供应商

GBASE金融应用指南5 | 系统开发规范

发布时间:2024-06-06

为帮助金融机构做好分布式分析型数据库产品的选型,推广在金融行业部署应用分布式分析型数据库的成功经验,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字符集;

• 应按照数据仓库的开发建设原则,对数据模型进行规范化;

• 开发环境和生产环境分开;

• 构建合理的任务调度机制,在满足业务要求的情况下尽量降低数据库并发;

• 正式上线前,进行性能评估测试。