传统的关系型数据库中的表通常由一个或多个字段组成,每个字段都预先定义了其可存储数据的格式及约束等,这类的数据就是结构化数据(structured data)。一个设计良好的数据库在其schema中定义这些格式或约束,并由相应的RDBMS为这些提供实现保证。相应地,非结构化数据(unstructured Data)就是指那些没有一个预定义的数据模型或不适于存储在RDBMS中的数据,这些数据没有额外的描述信息(元数据)因此无法推断这些信息的真实意义,比如文本文件。半结构化数据(semi-structured data)有着特定的结构,但每个记录的结构未必完全相同,因此,无法为这些数据记录提供预定义的schema,其元数据只有在数据创建时才能获取,通常都与数据交相存储从而实现自我描述(self-describing),如XML文件。
现今,如搜索引擎类公司的网络爬虫爬行而来的web页面或社交类站点产生的用户访问日志都属半结构化或非结构化数据,传统的关系型数据库管理系统对这类数据的存储及处理能力有限,于是处理这类数据的需求就催生了一种新的数据库系统,即大数据管理系统(Big Data System)或NoSQL。这场声势浩大的数据库管理系统革新运动以Google、Amazon、Yahoo!、Facebook等先锋为主导展开的。这些组织或者由自己的业务生成海量数据,或从互联网上自由获取海量数据,但对这些海量数据进行存储、分析和处理都无一例外地成为支撑其业务的核心需求。初期,他们都采用了当时主流的数据管理技术来满足类似需求,但也都在各自的应用中遇到了规模扩展、存储性能等各方面的限制。尽管数据管理并非他们的核心业务,但数据处理却成支撑其业务运作基本组成部分,因此他们各自注入大量的技术实力依据业务需求进行新技术研发。
尽管许多公司都对他们的研究成果采取了保密措施,Google却选择了将他们的成功经验公之于众。2003年,Google公开发表了论文“The Google File System”,系统阐述了采取商用硬件计算机集群存储海量数据的分布式文件系统GFS的实现;GFS采取“数据块”管理文件数据,并在集群中多个节点上存储同一个数据块的副本以实现冗余功能;GFS设计用来支持大规模、数据密集型、分布式应用程序的运行;此外,它还为流式数据读取进行了优化,因此特别适用于存储之后读取数据并对之做出处理类的操作。这之后的第二年,Google又公开发表了另一篇论文“MapReduce: Simplified
Data Processing on Large Clusters”,定义了一个编程模型及其运行框架,提供了于集群中的多个节点上自动并行、容错及可处理数百TB规模的数据集数据处理平台;MapReduce是GFS集群的组成部分,它是一个编程框架,能够让用户编写的代码分布式运行于GFS集群中的多个节点上尽可能通过本地数据访问完成数据的并行处理操作。MapReduce与GFS一同构成了大数据存储及并行处理平台,Google的搜索索引的建立也正是基于此平台得以高效运行。与此同时,Amazon也公开其购物车实现的基础组件Dynamo。
Google的MapReduce及GFS提供了海量数据存储及并行处理平台,但GFS并不支持对数据进行随机或实时访问,且仅适用于存储少量的、体积巨大大的文件,对海量小数据文件的管理有此力不从心。故此,Google开始寻找一种能够充分发挥GFS的高可用性及海量存储能力,又能支持类似邮件或分析系统等交互式应用的数据管理解决方案。这种数据存储要能够有效管理海量数据片断,又可以透明地将这些小数据片合并成为适合存储于GFS的大文件,也要内生地支持排序索引以在数据检索时最小程度地触发磁盘IO操作,还要能够存储网络爬行而来的海量数据并将其提供给MapReduce及时、快速构建搜索索引。针对这些需求,传统的RDBMS系统的管理能力已难以为继,因此Google的工程师发明了一种新的处理系统,这种系统移除了关系型数据库系统的众多特性而提供一种仅支持CRUD(Create、Read、Update和Delete)操作的简单API,以及一个实现范围或全表遍历的scan功能。2006年,Google将这些研究成果通过“Bigtable: A Distributed Storage System for Structured Data”论文公之于众。
任何对MapReduce、GFS及Bigtable技术感兴的朋友都应该认真读一读Google贡献给全人类的这三篇传世之作。它们也是开源系统Hadoop、HBase等得以构建的理论基石,Hadoop的核心组件为MapReduce和HDFS,其中Hadoop的MapReduce是Google的MapReduce技术的开源实现,HDFS是GFS的开源实现,HBase是Bigtable的开源实现。因此,这三篇论文也是深入学习Hadoop、HBase等的基础性材料。