4.2.3 大数据存储
大数据存储作为未来政府宏观决策体系中超大规模数据信息支撑的基础,是大数据基础设施的一个重要组成部分。当前的以大规模、高性能和可扩展为基础的网络化分布式海量存储系统的设计理念以及研究具有局限性,已经很难满足未来政府宏观决策中的各种复杂问题在规模、效率、可靠性、能耗、安全和智能化方面的综合性储存服务能力的需求。总体来说,政府宏观决策中的数据储存应该具有以下特点:政府决策数据中很多来源(如政府信息化数据平台、公众日常行为数据平台、城市运行数据平台等)的数据量都是以TB级的速度在高速增长,这样的数据规模和数据管理的难度已经今非昔比。各种决策分析模型对数据的可访问性和访问持续时间在增加,使得数据必须保证能够时刻处于可访问的状态。数据种类和数据应用的不断增值和扩展,使得决策中的大数据具有异构多样化、动态生长、语义丰富、地理分散等特征。政府宏观决策需要可靠、高效同时低成本的数据存储方式。
政府宏观决策分析中的处理对象既包括结构化数据,同时也包括大量非结构化、半结构化的数据,针对这样的存储要求,当前常用的主流存储技术包括:关系型数据库、非关系型数据库、实时数据库、分布式文件系统、列式数据库等。
1.关系型数据库
政府宏观决策数据来源中不乏大量传统的信息化平台,关系型数据库是传统信息化平台的数据基础。通过异构数据交换平台,从各个子业务系统中获取数据并存储。关系型分布式数据库的理论基础是ACID模型,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)的缩写。关系型数据库的理论基础决定了其具有较强的并发读写能力、数据强一致性保证、很强的结构化查询与复杂分析能力和标准的数据访问接口,非常适合数据库平台的建设,是处理结构化数据的主流技术。
然而随着互联网应用的高速发展,数据库的大小与过去的局域网内的应用相比提高了若干个数量级。通过SQL(Structured Query Language)数据库的ACID可以知道传统的关系型数据库因为通用性设计带来了性能上的限制,常见的解决方案主要有包括以下两种:一种是通过集群提供较强的横向扩展能力,但是当节点增加一定数量时,性能上就难以获得明显的提升了,而且这样的集群成本很高。另一种是采用数据分片技术,通俗地讲,是将一个大数据库按照一定规则拆分成多个小数据库的一种技术。常用的分片方案有:按功能划分(垂直切分)或按表中某一字段值的范围来划分(水平切分)[123]。
2.非关系型数据库
非关系型的数据库即是Not Only SQL(No-SQL)。政府拥有的数据资源中包含大量的不适合传统关系型数据库储存的业务数据,在对信息进行整合利用的过程中也会产生大量的中间数据需要高效地储存,这些数据如果使用传统关系数据库管理,效率会很低,也难以满足数据量平行扩展的需求,使得性价比不高。
通过No-SQL数据库,使用Key-Value结构来存储这些数据,在保证数据可用性和关系型的同时,满足了数据的高效存储和高效处理、平行扩展等要求。和关系型(SQL)分布式数据库的ACID理论基础不同,No-SQL分布式数据库的理论基础是BASE模型。BASE是Basically Available、Soft State、Eventually Consistent三个词组的简写,是对CAP原则(Consistency、Availability、Partitiontolerance)中CA(Consistency Availability)的应用和延伸[124]。
3.内存数据库
内存数据库是目前支持实时任务处理的最适合的技术。内存数据库使用内存作为数据库存储的介质,因此存取的速度很快,能够与CPU进行快速的数据交换,避免了数据库使用外存时存取速度慢、执行时间不可预估等缺陷。尽管内存数据库对于内存空间的需求比较大,但并不要求把所有的实时数据和历史数据都放到内存中,只是将存取频率较高和有效时间较短的数据保存到内存。内存数据库应该设置I/O(Input/Output)接口,方便与外部存储器中的关系数据库进行数据交换。使用内存数据库对实时事务处理进行支持时,数据是驻留在内存中的,这样就解决了传统磁盘数据库事务运行中输入/输出的瓶颈,使CPU在直接访问数据库时达到极高的存取速度,大大提高了系统性能和吞吐量。对于有效的当前数据,需要尽可能迅速地提供数据的索引和存储,以供分析使用,因此可以采用内存数据库的方式完成对有效数据的存储,数据的保存采用顺序保存的方式。内存数据库的时效引擎会自动扫描有效数据,失效的数据会被顺序转入历史数据库,采用Key-Value结构保存。对于历史数据,可以使用多种不同的压缩算法,以适应业务系统的需要。包括有损的线性拟合压缩算法、无损的哈夫曼编码方式的压缩算法,可以节约大量的存储空间。
4.分布式文件存储
分布式文件系统(Distributed File System,DFS)是目前实现非结构化数据存储的主要技术。在分布式文件系统中文件管理系统中的物理存储资源不需要直接连接到本地的节点上,而是可以通过利用计算机网络与各个节点相连。分布式文件系统基于客户机/服务器模式进行设计。一个典型网络可以包含数个可供多用户进行访问的服务器。此外,利用对等特性可以允许一些系统同时扮演客户机和服务器的双重角色。例如,用户可以“发布”一个允许别的客户机进行访问的目录,一旦目录被其他客户机访问时,对于其他客户机来说这个目录就像是在使用本地驱动器一样[125]。
目前最成功的分布式文件系统的实施标准和实现是Apache Hadoop的HDFS(Hadoop Distributed File System)系统,HDFS正是基于谷歌的分布式文件系统进行构造的。它有着高容错性的特点,并且设计可以用来部署在低廉的硬件上,除此之外它还可以提供很高的吞吐量来支持对应用程序数据的访问。因此,在那些有着超大数据集的应用程序上有着很大的应用空间。HDFS放宽了对可移植操作系统接口(Portable Operating System Interface of UNIX,POSIX)的要求,从而实现以流的形式来访问文件系统里的数据,其包括以下特点。
(1)支持超大文件:这里的超大文件指的是具有几百MB、几百GB甚至几百TB大小的文件,目前已经有存储几百PB级数据的Hadoop集群了。
(2)流式数据访问:HDFS的核心思想是一次写入、多次读取,是目前较为高效的一种访问模式,通常数据集由数据源产生或者从数据源直接复制而来,然后在此数据集上长时间地进行各种分析。每次分析中都会包含该数据集中的大部分甚至是全部的数据。
(3)硬件要求低:Hadoop并不需要运行在昂贵的高可靠性硬件上,其被设计可以运行在价格低廉的商用硬件集群上。
(4)高时间延迟的数据访问:HDFS为了适应高吞吐量的应用进行了优化,而这是以牺牲一定的时间延迟为代价的。因此,对于那些要求较低延迟时间的数据访问应用,不适合在HDFS上运行[126]。
5.列式数据库
列式数据库是一种按照列相关存储架构来存储数据的数据库,主要适用于即时查询和批量数据处理。面向列的数据存储架构更适用于政府宏观决策这样在海量数据中进行有限复杂查询的场景,列式数据库对比传统的关系型行式数据库的优势主要体现在[127]以下几点。
(1)不读取无效数据:在降低I/O的开销的同时提高了每次I/O的效率,查询语句无须读取其他无关列的数据,只从磁盘读取所需要的列,大大提高查询性能。
(2)高压缩比:压缩比可以达到传统数据库的5~20倍,使得数据占用的空间降低到仅有原来的十分之一,从而大大降低了存储设备的成本。当数据库的大小与数据库服务器内存大小之比达到或超过2∶1时,列式存储的I/O优势就显得更加明显了。
目前主流的列式数据库存储方案是Apache Hadoop的HBase(Hadoop Database)体系,和HDFS一样,HBase也是基于谷歌的Big Table进行构造的。