作者 | 蔡仕志
蔡仕志,农行研发中心高级专家。理学学士,高级工程师,先后就职于农行福建省分行、总行软件开发中心、信息技术管理部、数据中心,现任农行研发中心高级专家。长期深耕系统技术领域,曾获国家机关优秀青年创新奖,工作成果先后获得人民银行、银监会各类奖项10余次。

本文根据蔡仕志老师在DTCC 2019数据库大会分享内容整理而成,介绍了农行数据库使用实践和发展规划,主要包括数据库使用实践、数据管理体系建设、数据管理典型案例、数据库发展规划等。
中国农业银行(以下简称:农行)在信息化系统建设过程中,先是把关系型数据库作为联机交易型数据库使用,后来为满足分析型应用需要开始使用分析型数据库,近几年来随着应用场景细分,对基于 Hadoop 的大数据生态和新兴起来的 NoSQL、NewSQL 等数据库也逐步开始了大量应用。在数据库的整个使用过程中,关系型数据库一直占据着最为重要的位置,市场上主流关系型数据库产品都有使用到,积累了较多的使用经验。
随着这几年两地三中心工程建设,对关系型数据库的使用提升到了一个新的层次。为了适应业务和技术市场的不断进化,对分布式数据库、Spark SQL 等新兴数据库技术也有了深入的探索研究和实践,对数据架构管控、数据生命周期管理和数据库产品应用进行了整体规划。
01 数据库使用实践
1.1农行省域及数据大集中
2000年左右,农行开始启动省域数据集中,前后时间大约4年,之后进行数据大集中,时间也在4年左右。

省域集中即把各个地市的数据甚至包括手工网点的数据上收到省行,数据大集中是把所有数据上收到总行。在省域集中的过程中,由于各个省业务量有大有小,因此,采用的技术方案不同。业务量大的省会使用IBM的大型机,有些中等业务量省份会用IBM的中型机AS/400 ,有些中等业务量及小业务量省份会用开放平台的Unix小型机(IBM和HP)。
农行数据大集中先是将数据集中到北京,后来迁移到上海。数据上收后,各个省仍然有开放平台的数据库。无论是在省域集中还是数据大集中阶段,凡是用了IBM大型机和中型机的,都是使用IBM的DB2,凡是开放平台UNIX下,都用的是Sybase ASE。
农行曾经大规模使用了Sybase,后来随着数据体量的增加和Sybase自身的发展问题,Sybase逐渐无法满足农行的需求,这个问题我们后面再聊。
1.2农行数据库产品总览
农行数据库使用情况如下:

少量业务处理应用系统因特殊原因,使用了:SQL Sever、MySQL、DB2 PureScale等;
分析型领域:最开始使用Sybase IQ,后来也是无法满足大数据量下的处理效率,只好引入国产南大通用GBASE,结合Hadoop、HBASE等产品;
内存数据库:Redis、MemCache、MongoDB等。
1.3 关系数据库工具箱
除了数据库产品本身以外,还有一些相应的工具箱。

DBArtisan:图形化数据库管理工具,能够支持多个数据库产品,能够在相同的界面运行非常简捷方便的数据库管理操作。
ProActive DBA:用于数据库性能分析优化的,在Sybase年代是最好用的,能看清楚很多服务器端运行的一些细节,对于排查问题,提升性能非常有帮助。
OEM: 在Oracle上基于Java型的综合性系统管理平台,目前应用范围较广。
OMEGA MON:在主机平台能实现对DB2和Z/OS的监控。
此外,农行还引入了IBM的QREP、IBM-CDC、Oracle GoldenGate用于异构数据库之间的实时复制数据,特别是在两地三中心和主机以及开放平台的一些数据同步上。
在商业工具之外,还有一些与应用结合相对紧密的需求,是商业监控和管理工具满足不了的,所以农行也自主开发了一些工具,比如MyAME、OCMS等。
1.4 关系数据库经验谈
除了工具之外,我们再来谈一下这十几年来农行使用关系型数据库的一些心得体会。

复合索引建太多会影响数据维护,也会间接影响性能。根据农行的经验,一般复合索引的字段数不应该超过5个。
跟索引有关系的统计信息,对数据库来说也非常重要。如果统计信息不准确的话,索引可能不会被正确使用,肯定严重影响性能。要想让它准确的话,就需要进行定期的更新,如采用定时机制由系统级来更新。最好的是由应用人员结合具体应用设计好什么时候该更新,因为应用更清楚数据变化规律。
使用分区功能的时候,要注意选择合理的分区方式和分区分段。要注意对于分区的数据处理,有可能导致全局索引失效。农行在使用Oracle的时候,曾出现过类似问题。有些情况下,如果更新局部索引的话,可能需要同步更新全局索引,不然会导致性能问题。
此外还有一个常用技术叫分表,分表其实不算是数据库的计术,算是应用的设计方面的。我们经常在应用设计上按周期分表。比如可能一个星期一天一个表,在写日志的时候用不同的表,这样的话有很多的好处,比如能够快速进行应用切换和数据清理更安全和方便。
数据库还提供了并行功能,这也是跟刚才提到的索引一样,属于让人是既爱又恨的功能。一般不太敢在联机的时候启用并行技术,因为并行技术虽然能够把所有的计算资源同时利用起来,但如果联机运行,可能某一个查询一下就因为并行,把资源耗光了。那并行功能应该用到什么地方呢?并行功能在做批量、数据备份、索引以及数据导入的时候使用是最合适的。
数据库产品还提供很多的诊断工具,有一些是字符型的,有一些是图形的,我们经常用这些工具来检查服务器的查询计划、执行时间、物理和逻辑IO、网络通讯,等待时间等等。
这些都是我觉得可以借此机会跟大家分享的我们近一二十年来使用数据库的一些经验。
当然除了数据库本身产品设计能力以外,我们觉得还是应用本身的数据结构和模型的设计,其实是对性能影响最大的。
此外,在SQL方面,通过合理地设计,控制事务颗粒度大小,这对于总体性能以及合理控制应用的资源消耗是非常重要的。如果适当地采用组合SQL,也能够避免一些数据库服务器和客户端的反复交互,对性能是有利的。
在运维方面,农行制定了一些针对不同数据库产品的标准配制规范,来指导维持数据库运行环境。因为不同的人运维会有不同习惯、误操作等问题,这需要通过规范来解决。还可以适当的把一些小的数据库进行适度整合到一个大的数据库服务器,避免数据运维的复杂度和工作量。

农行使用OLAP的经验有4个,首先是维度模型。在分析型数据领域,大多数都使用维度模型。通过合理的设计,虽然增加了数据冗余,但是提升了性能,这实际上是一种以空间换时间的方法。
第2个是数据分布,对于大的表,通过合理的哈希分布,合理地选择哈希列以便使得所有的数据在不同的节点上均匀分布。这样的话能够让同一个查询在多个节点同时跑起来。对于小的表格、维度表的话,我们会建一些复制表,存在不同的节点上。目的是减少一些跨节点的查询从而提高性能。
第3个是值得一提的GBASE索引。GBASE本身是粗粒度的智能索引,所以如果不必要的话,一般是不需要自建索引的。
第4就是,GBASE不支持分区,所以,前面提到的分表,其实也就变得很有使用的必要了。
02 数据管理体系建设
2.1 企业级数据模型
农行的企业级数据模型分两部分,其一是数据模型管理,其二是数据模型设计的方法。数据模型管理分为企业型、应用级两个层次。

应用级的数据模型分成C’和D两个层次,C’是对企业级逻辑数据模型在具体应用系统里面的细化和落地,D是应用系统实际用到数据库中的物理数据模型。

实体特征对应C级逻辑数据模型,是对实体的不同组成部分进行分类。
属性分类是对实体的属性进行分类抽象。
数据类型应用规范是对具体的属性分类进行进一步的描述,限制该属性的取值范围和精度等。
2.2 数据管理制度和规范
数据管理制度和规范共有三阶,包括战略层、规章制度层和技术标准层。

2.3 数据质量保证机制
农行的数据分布于消费领域和生产领域,一般数据在使用过程当中,就可能会发现它存在问题。发现数据问题后,我们会把这些问题整理形成相应的问题清单。这些清单由业务部门牵头进行分析原因。分析完以后会形成数据质量报告和数据问题报告,这些报告会按季度来提交到行里面,通过专题会来进行研究。

最后,会把整改结果反馈到消费领域,然后在消费领域再建立相应的监测规则,以便发现可能在这个运行中产生的新的数据问题。新的问题发现以后,会在这个闭环里面进行循环往复的修正,这就是农行的数据质量保证机制,通过这个机制能够实现数据标准管理和元数据管理的一个不断地持续改进。
2.4 数据管理技术平台

2.5 OLTP数据管理实践
农行从2008年开始,花了几年的时间研究,形成了自己的11步OLTP的建模方法和建模流程。之后在几年的时间结合BoEing数据模型进行反复实践并把它落地。

2.6 OLAP数据管理实践
与OLTP有所不同,农行的OLAP最开始是独立建设的。能够满足部分业务领域的需求。基于不同的标准,逐步形成了系统孤岛,系统间的数据共享程度相对较低。

OLAP数据管理实践也有类似前面OLTP的四步走的过程。
03 数据管理典型案例
3.1 核心系统下移成效

查询交易下移之后,还有批量。我们先利用前面提到的QREP,把它从DB2同步到Oracle,建立起相应的批量执行平台,实现批量的下移。
下移之后空间就节省了很多,近几年都没有扩容,而且随着下移幅度进一步加大,虽然总业务量还是节节攀升,而且越来越快,但是主机的消耗并没有增加,甚至相对来说还有所下降。
3.2 银行卡受理中心系统
银行卡受理中心属于典型的高并发,响应速度要求和可用性要求也很高的应用系统,靠数据库本身来实现的话很困难。

3.3 分布式缓存云

3.3 大数据实践

农行的大数据实践是基于GBASE和Hadoop,结合自己设计的各种各样的数据处理平台、数据清洗平台等等,建了自主可控的大数据体系。该项目还在2018年人民银行科技发展奖中得到了一等奖。
3.4 两地三中心建设

关于异地数据传输、切换:异地数据传输、切换的时候,Qrep本身会有5分钟的数据丢失。为了应对这个问题,农行通过网络级报文进行数据补偿,以避免数据丢失。

3.5 快捷支付系统
快捷支付系统是非常重要的一个应用系统。节日、促销活动(如春节和双十一)时,支付宝、微信红包等等都在快捷支付系统上面运行,这是压力非常大的一个应用系统。

为了满足需求,我们设计了高达24个RAC的庞大集群。
为了减少数据库访问压力,农行通过把静态数据及变化频率低的数据缓存到Redis中,对客户限额也进行缓存,应用对于限额的访问和回写都只访问Redis,缩短交易耗时。
为进一步提升系统高可用性,农行计划新增Redis同步功能,日终将月限额写回至数据库,实现限额数据持久化。当Redis出现故障时,可以通过访问数据库实现限额控制。
数据库产品本身的支撑能力有限,包括Oracle,虽然它已经是业界公认的成熟产品,但是业务场景的需求依然很庞大,导致我们需要对应用进行复杂的设计。这是我们需要考虑引入分布式数据库产品的一个动机。
04 数据库发展规划
4.1 数据库产品战略

在分布式数据上有引入考虑。
农行预计在一些小规模的应用会使用MySQL,分析型数据库、历史交易查询、历史交易数据和内存数据库方面还沿用现有产品。
值得一提的是,我们正在选择图数据库和文档数据库,并对这方面有一定的了解。
数据库产品的选择其实只是第一步,如何把这些产品结合业务需要进行合理的使用规划,是一个持续时间更长、影响更为广泛的过程。
4.2 批量数据分布架构
农行通常会结合数据架构的设计选择数据库产品,农行内部主要有两套数据架构,一个是批量数据分布架构,它是满足T+1以及时间更长的数据使用,另外一套是实时的数据架构。

4.3 实时数据分布架构
农行实时数据的分布架构,是通过数据复制工具、网络旁路工具、日志采集工具等工具把不同的元数据汇总到实时数据交换层。实时数据交换层可以直接提供最上面的应用系统使用,也可以提供给实时计算层,进行进一步的加工。加工完以后提供给待消费的应用系统使用。

以上就是我今天想跟大家分享的内容。数据库是可靠和稳定性要求的典范,农业银行为广大用户提供银行金融服务,同样也要求高可靠、高一致,我们相信,稳健才能行远,我的分享就是这些,谢谢!
版权声明及安全提醒:本文转自网络平台老鱼笔记,文章仅代表作者观点,不代表「金融文库」立场。相关版权归原作者所有,「金融文库」仅提供免费交流与学习,相关内容与材料请勿用于商业。我们感谢每一位原创作者的辛苦付出与创作,如本转载内容涉及版权及侵权问题,请及时联系我们客服处理(微信号:JRwenku8),谢谢!