理论教育 非结构化数据存储技术对传统关系数据库的挑战

非结构化数据存储技术对传统关系数据库的挑战

时间:2023-05-27 理论教育 版权反馈
【摘要】:数据仓库的流行使得传统关系数据库以行处理为基础的存储索引结构逐渐受到质疑。最终动摇了传统关系数据库在信息存储领域里的主导地位的是谷歌等电商大计算平台的发展和与此相关的非结构化数据存储技术的成熟。谷歌的这些非结构化的数据存储和分析方面的创新开启了大数据时代数据存储的非结构化趋势。非结构化数据库与传统关系数据库的最重要区别是减弱了数据库的ACID特性。

非结构化数据存储技术对传统关系数据库的挑战

20世纪80年代随着局域网和关系数据库技术的普及,企业开始积累起大量交易数据。针对这一现象,1988年IBM的研究人员提出了“信息仓库”(Information Warehouse)概念,并预测在不久的将来企业用户需要一种更加方便有效的方法来分析这些不断积累的海量数据,并从中获取有价值的决策信息,这一预测在90年代成为现实。围绕着这些数据的存储和分析,由信息仓库演变而来的“数据仓库”(Data Warehouse)模式成为大数据处理的最初选择。

1992年Prism Solutions咨询公司的创始人比尔·恩门(Bill Inmon)出版了《建立数据仓库》一书,提出以关系数据库理论中的第三范式为基础的搭建在关系数据库之上的“企业信息工厂”概念,被业界称为由上向下的数据仓库开发模式。同一时期,前施乐公司帕洛阿尔托研究员、红砖系统公司创始人拉尔夫·金博尔(Ralph Kimball)提出了抛开关系数据库模式,用事实表(Fact Table)加维度表(Dimension Table)的星形模式(Star Schema)搭建企业各个部门需要的数据超市(Data Mart),然后通过合并相同的维度表,形成维度表总线矩阵,从而由下向上形成企业数据仓库的开发方式。金博尔的架构因为更有利于普通用户理解和分析数据所以更受欢迎。

数据仓库的流行使得传统关系数据库以行处理为基础的存储索引结构逐渐受到质疑。因为事实表动辄上百列的大小和用户使用事实表时只需要读取一行中的几个相关列数据为主要操作的现实与关系数据库以行为存储单元的传统模式产生了读取效率上的矛盾。于是,以列存储为基础来组织数据库架构的思想和相关的软件开始出现。此时已在麻省理工学院的斯通布雷克再次成为这一新趋势的先锋,他主导的C-Store项目是最早的开源列式数据库之一,2005年将其商业化为华克斯(Vertica)公司。塞贝斯也推出了相应的IQ列式数据库。德国ERP软件巨头思爱普则通过整合其收购的各种技术和开源软件推出了列式数据库HANA系统,并在2012年收购了塞贝斯,成为列式数据库技术的主导公司。

在数据仓库推动列式关系数据库产生的同一时期,在线交易处理(OLTP)催生了内存数据库的发展。随着20世纪90年代电子商务的发展,网络交易量飞速增加,企业则需要对这些不断增加的实时交易数据进行高速存取。传统的磁盘存取方式一般会造成高达75%的效率损耗,于是随着内存成本的不断下降,通过内存来存储整个数据库成为新的选择,这一趋势导致了内存数据库的发展。

最终动摇了传统关系数据库在信息存储领域里的主导地位的是谷歌电商大计算平台的发展和与此相关的非结构化数据存储技术的成熟。

谷歌的搜索系统平台主要通过添加廉价的服务器来满足不断增长的计算需求。而廉价的硬件设施意味着需要通过有效的软件系统来弥补硬件高损耗和频繁更换所带来的不足。由于在创业之初就遇到了这一问题,谷歌开发和完善了一套独创的分布式管理系统,这就是谷歌文件管理系统(Google File System),谷歌大表(Big Table),以及用来分配计算任务和收集计算结果的映射化简(MapReduce)算法。通过这一套管理系统,谷歌能够在不断大规模扩展其硬件基础设施的同时减少管理成本和系统维护费用。(www.daowen.com)

谷歌文件系统是完全按照其搜索需要和集群环境设计的。因为谷歌文件的大小通常在千兆(GB)以上,所以谷歌文件管理系统是以64MB为最小存取单位制定的。每一个64MB的存取单位被称为一个数据块(Chunk)。一台服务器如果硬盘大小为160GB的话,恰好可以存储2500个这样的数据块。在每一个集群里,有一台计算机作为主服务器来存储集群里每一台服务器上所存储的数据块的信息。在日常运营中,每一台服务器都定期将自己所存储的数据块的信息发送给自己所在集群的主服务器,以便保持及时更新[19]

谷歌文件系统的另一个重要特点就是冗余备份。谷歌系统的每一个数据块都有至少三个备份,并且分散在三个地理位置不同的集群中。这样一方面可以避免一个集群的系统灾难所导致的数据丢失;另一方面当用户程序需要读取数据时,系统可以根据用户的地理位置,选择一个最近的集群提供该数据块的信息,从而提高反应速度[20]

除了文件存储系统,谷歌在2003年开始使用的映射化简算法也独具匠心。因为绝大多数程序员对并行运算编程不熟悉,所以谷歌通过映射化简的算法调用减轻了编程人员利用集群解决运算问题的编程复杂度,大大简化了很多谷歌内部产品的开发速度[21]。谷歌搜索引擎的网络索引是谷歌的核心服务,这一服务需要处理高达20000GB的数据量。通过使用映射化简算法,该索引程序不但减少了代码数量,而且只用8个小时左右就可以完成索引的更新。2003年8月,谷歌通过添加自动处理服务器宕机,自动优化任务分配等调用进一步完善、充实了映射化简的代码调用库。谷歌的这些非结构化的数据存储和分析方面的创新开启了大数据时代数据存储的非结构化趋势。

非结构化数据库与传统关系数据库的最重要区别是减弱了数据库的ACID特性。虽然强调ACID能够给数据库带来可靠性,但是维持ACID特性会给海量数据存储带来越来越高的不必要的运营成本,尤其像一条微博消息的转发数目这样的非关键数据其实并不需要保证实时状态更新。另外在很多情况下,ACID特性很难在分布式计算中获得保证。比如谷歌文件系统是通过冗余备份的方式来补偿硬盘出错导致的数据丢失问题。当系统需要对分布在不同地理区域的备份进行操作时,除非采取强制锁定,否则无法保证所有的备份都被同时更新,而频繁的锁定显然会严重影响系统效率。针对这一现象,加州大学伯克利分校的里克·布鲁尔(Eric Brewer)在2000年分布式计算原理研讨会上提出了布鲁尔猜想,这就是分布式数据库系统无法同时满足数据的一致性(Consistency)、可用性(Availability)和分割容忍(Partition Tolerance)的要求。用户只能从这三项要求中选择两项来同时实现。这一猜想在2002年被麻省理工学院的两名计算机科学家证明,并被称为布鲁尔定理或者帽子定理(CAP Theorem)。根据布鲁尔定理,许多非结构化数据库采取了满足可用性和分割容忍,然后实现最终一致性(Eventual Consistency)的分布式存储方式。

促进非结构化的一个更深层的因素是以摩尔定律为发展方向的英特尔架构在微处理器单核方面已经难以突破3.5MHz的物理极限,所以只有通过水平扩展内核数量和企业的分布式集群发展来进一步提高数据处理速度。多核微处理器和集群技术使得数据库的分割存储成为必然。当分割容忍成为先决条件,可用性成为用户的基本期待时,布鲁尔定理决定传统数据库的ACID一致性必然要被最终一致性所取代。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈