为帮助金融机构做好分布式数据库产品的选型,推动分布式数据库产品在金融领域的稳妥应用,金篆GoldenDB在北京金融科技产业联盟的指导下编写《GoldenDB分布式事务型数据库金融应用指南》。《指南》深入探讨了如何从应用规划、应用开发、数据迁移等关键环节,将金篆GoldenDB引入金融机构的IT系统中;在数据安全方面介绍了数据加密、访问控制等功能,在性能调优部分提供了完整的优化策略。
上期为大家讲解了如何快速入门基于金篆GoldenDB的金融应用开发、如何通过其他方式访问GoldenDB。本期是系列文章的第6期,将深入介绍如何进行数据均衡设计。


数据均衡手段
业务大表建议采用分片表、分片+分区、多级分片的方式实现数据的均衡分布,分片策略支持:哈希、范围、列表,各分片上的数据量均衡,业务增长过程中数据变化也保持相对均衡,其中:
1)面向用户的主档表(客户、账号、用户)优先考虑用HASH分发策略。分片键字段少的大表,采用RANGE/LIST分片策略,例如面向机构编码或地市字段大表采用LIST分片策略。
2)对包含日期的流水表,采用先分片再分区。
3)每个分片的数据总量不超过2~3TB,推荐不超过2TB。
4)单台服务器的数据总量不超过6~9TB,推荐不超过6TB。
5)单个分片的表记录行总数不超过1亿条。
6)单个分区的表记录行总数不超过2千万条。
7)关联性强的表(比如JOIN、批量迁移等)采用相同的分片策略,例如客户的主档表和流水表,使用相同的分片策略,使得相同客户的多个表数据落在相同的分片上,减少跨分片关联。
8)避免热点数据的过分集中,如果因为分发策略的原因导致热点数据,可通过增加分发字段的方式,使数据分布进一步细化,热点的判断可通过各个分片的各项指标综合判断。
9)多级分片,实际使用中出于某些考虑,需要对数据进行复杂的分片。比如集团客户分在某个分片,非集团客户按照客户号HASH分片。
10)先分片再分区,对包含历史表等有日期字段的表,采用先分片再分区的策略。使用年份、月份等字段进行分区设计,将相同分片上的大表按日期将数据分散到多个分区。

选择恰当的分片主题
为了快速、合理地进行表分片设计,在启动分片设计之前,理清各实体之间的关系至关重要。从实体关系中提炼业务的分片主题,比如分为围绕用户(客户、账号、用户)、机构等相同分片主题的表,使用相同的分片策略,以及相同的分片字段作为分片键。将整个工程中分片主题控制在围绕其中一个主题为主,少量主题为辅助(3~5个)的规模。

图1 选择恰当的分片主题
1)分类主题,不分片。
2)参与人主题,机构按照机构编号进行RANGE分片,考虑到机构的规模进行合理的设计,保证各分片数据的均衡。员工按柜员号进行HASH或者RANGE分片。
3)客户、账号、用户相关的表,可按照客户编号进行HASH或者RANGE分片。
4)合约主题,业务主档按客户号进行HASH或者RANGE分片。机构按照机构编号进行RANGE分片。
5)事件主题,业务流水按客户号进行HASH或者RANGE分片。机构按照机构编号进行RANGE分片。在分片基础上,可对事件发生的时间字段再进行分区。
6)资源项主题,按照机构编号进行RANGE分片。

对应用透明的SQL开发模型
金篆GoldenDB分布式架构对于应用开发是透明的,由数据库后台进程自动进行SQL解析和分片路由,无需应用关心数据具体存放于哪个分片以及计算分片位置。
下面通过几个典型SQL场景说明金篆GoldenDB如何自动进行SQL解析以及分片路由、多表关联处理,涉及员工信息表和销售信息表,建表DDL如下:

1)查询员工编号为1003的员工信息

2)SQL2:统计员工基本工资大于5000且销售额大于50000的员工总数


通过上述两个典型场景SQL语句可以发现,业务侧在进行SQL开发过程中不用关心具体操作记录所处的分片信息以及分片策略,重点关注业务本身逻辑即可,当然,为提升SQL执行效率减少不必要的跨分片的操作,这点在库表模型确定分片策略阶段应充分考虑。

对应用透明的事务控制过程
应用在分布式模式下事务控制和传统集中式数据库一致,由数据库内部保证事务的ACID特性,应用无需关心分布式架构内部的事务控制过程。事务控制典型过程如下:

本期为大家讲解了如何基于金篆GoldenDB进行数据均衡设计,下期将深入介绍如何基于金篆GoldenDB提升交易处理性能,敬请期待。




