南大通用沈丽萍:大数据时代的数据库技术与应用

既然介绍了一些技术,给大家介绍一下南大通用的GBase  8a,它们中间有万兆网络把它连接起来,它分为三个节点或者两个节点一组,用组进行管理。组管理的目的是在这个同组的数据还要互相备份,想通过多副本机制保证集群的高可用性。它的数据从哪里来?我们说基本上它的数据都是其他的数据源,生产系统、各个交易系统的数据,每天定时的会把数据跑出来,通过我们的分发节点,把数据分发以后,分发到我们的节点上。上层应用可以连到集群的任何一个节点,下达它的SQL命令,它在哪个节点执行的结果都是一样的。

MPP数据库还支持适合于分析类应用,它的另外一个特点是列存储的。行存储的数据库按行为一块唯一配置来存的,特点是小数据量,要改一个数,直接把一行数据取出来,把这些数据改了就可以。它的缺点就是它查询的时候,如果大家有经验,查询性能比较慢,它要单独列一些索引,数据和索引的分离。另外,行存数据基本上会压缩,另外,它查询的时候对某一列做操作,必须把整行的数据拎出来,然后找到那一列,这样它I/O占的比较多。列存数据库是按列进行存储的,优势在于查询、统计、分析。我们查询的时候可能一个宽表,可是我们只对其中的个别列进行分析,它分析哪一列,直接把那一列的数据读持续就可以了。另外,列存储基本上都是压缩的。所以,这块它就是占用的空间比较小,I/O也大量的减少。从行存转化成列存储以后,采取性能一般都有数十倍的提升,而且压缩比有的高达1:20。分布式的数据库有几种分布策略,有复制的还有分布的,假如我们有复制表,把一个小表,纬度表可以分别存储到各个节点上。分布表是完整的数存到各个节点上,分布表就是我要按照一定的分布策略,把这个表拆成小表分发到各个节点上。我们分随机分布表和hash分布表,hash就是去一列,把相同值的节点分发到各个节点上。对于我们一般常用的新型模型,假如说一些纬度表,我们就采用复制表的方式把整个表都放到各个节点上。同组的数据做一个互为备份,万一一个节点失败了,可以另外一个节点返回正确的结果。

刚才说了hash分布,对于分布式查询来说,其实比较难处理的在于两个大表的关联运算。我们分为静态hash和动态hash。假如都是按关联键事先把数据排在一个节点上,只要本地的两个小表进行关联,把结果上传给上层应用就可以了。还有一种情况,其中有表不是按照你这个hash等值关联键进行分布的,这时候要按照键重新动态把这个数据再做一次分布之后,再进行关联操作和其他预算,这就叫动态的hash。但是,因为它列存储,只把这一类数据传一下就可以了。

并行,单机版也可以有并行,算子里头,像扫描、关联,以及聚合这种操作都可以把它并行,最大的利用单机的多核资源。我们说MPP是充分的利用了单机的并行,然后在多个节点上再一次更大规模的并行。像这样它就能够,假如说可以建立100个节点的这种架构的系统,那么它就能达到1000个核的运算能力,甚至I/O达到10GB/s,内存达到单节点,要支持这样大的能力,它的成本肯定是不可预想的。

高可用用组的方式存副本,节点正常的时候每个节点都参与运算,当其中一个节点出故障的时候,它就把这个任务发给其他有副本的节点来保证高可用性,就是节点出故障了也能返回正确的结果。我们说的扩展,传统的SMP的数据库都是纵向的扩展,MPP数据库是通过横向的,增加节点的方式来进行扩展。那么,扩展的目的一个是提升性能,再一个就是支持更大的数据量。MPP数据库的应用方向主要是适合机器查询、统计分析等。

下面给大家简单介绍一下案例。MPP数据库在金融行业已经有成功的上线的项目。主要说一下农行的数据仓库的项目,是真正的实现了PB级的大数据平台。它总体架构分为六层,最底下是数据来源层,都往这个平台上吐数据,底下做了数据初步的处理层,建了一个将近100个节点的Hadoop集群,做数据的抽取、转换,另外做银行系统拉链的加工。然后就是模型指标层,用Gbase  Ba  MPP  Cluster。上层还有数据集市层,分别建了四个数据集市,每个集市都是用了一个MPP的数据库。那么,因为银行的业务非常复杂,它通过建多个集群,而且这么严格的按这个层来建立,主要是避免这次假如说这里失败就只影响我这一层,再失败可以从我的下一层再重新来一遍,所以保障了可用性。上层应用,当然它还有中间件,以及上层的应用。MPP物理架构是采用华为的国产设备,我们数据库也是国产数据库。在底下大的就是它的主仓库,数据仓库,是两个56集群,总共是112个节点,还有16个加载机,是双活的,一个写处理当天的数据,一个是查询的集群是查询昨天的数据。这个项目是2013年开始应用,一直连调。到2014年主库上线了,然后不断的做优化,2016年准备要建八个数据集市,总共的节点数加Hadoop要打造800个节点。所以,这个项目是针对一个海量数据处理,因为它数据处理量已经超过2PB了,而且有50多数据源于,目前节点数已经超过200个节点了。它的复杂业务是SQL  60000多个,将近15000多张表,整个成本是千万级的成本。