什么是NoSQL 随着用户内容的增长,所生成、处理、分析和归档的数据的规模快速增大,类型也快速增多。此外,一些新数据源也在生成大量数据,比如传感器、全球定位系统(GPS)、自动追踪器和监控系统。这些大数据集通常被称为大数据。数据不仅仅快速增长,而且
什么是NoSQL
随着用户内容的增长,所生成、处理、分析和归档的数据的规模快速增大,类型也快速增多。此外,一些新数据源也在生成大量数据,比如传感器、全球定位系统(GPS)、自动追踪器和监控系统。这些大数据集通常被称为大数据。数据不仅仅快速增长,免备案空间,而且半结构化和稀疏的趋势也很明显。这样一来,预定义好schema和利用关系型引用的传统数据管理技术就受到了挑战。
在探索海量数据和半结构化数据相关问题的过程中,诞生了一系列新型数据库产品,其中包括列族数据库(column-oriented data store)、键/值数据库和文档数据库,这些数据库统称NoSQL。
今天NoSQL泛指这样一类数据库和数据存储,它们不遵循经典RDBMS原理,且常与Web规模的大型数据集有关。换句话说,NoSQL并不单指一个产品或一种技术,它代表一族产品,以及一系列不同的、有时相互关联的、有关数据存储及处理的概念。
RDBMS假定数据的结构已明确定义,数据是致密的,并且很大程度上是一致的。RDBMS构建在这样的先决条件上,即数据的属性可以预先定义好,它们之间的相互关系非常稳固且被系统地引用(systematically referenced)。它还假定定义在数据上的索引能保持一致性,能统一应用以提高查询的速度。RDBMS可以容忍一定程度的不规律和结构缺乏,但在松散结构的海量稀疏数据面前,传统存储机制和访问方法捉襟见肘。
NoSQL缓解了RDBMS引发的问题并降低了处理海量稀疏数据的难度,但是反过来也被夺去了事务完整性的力量和灵活的索引及查询能力。
总之,NoSQL数据库是非常高效、强大的海量数据存储与处理工具。大部分NoSQL数据库都能很好地适应数据增长,并且能灵活适应半结构化数据和稀疏数据集。
背景和历史Google建造了大规模可扩展的基础设施,用于支撑Google的搜索引擎和其他应用。其策略是在应用程序栈的每个层面上分别解决问题,旨在建立一套可伸缩的基础设施来并行处理海量数据。为此Google创建了一整套完备的机制,包括分布式文件系统、面向列族的数据存储、分布式协调系统和基于MapReduce的并行算法执行环境。
Google公开发布了一系列论文来解释其基础设施中一些关键的组成部分:
Sanjay Ghemawat、Howard Gobioff和Shun-Tak Leung,“The Google File System”; pub.19th ACM Symposium on Operating Systems Principles, Lake George, NY, October 2003
Jeffrey Dean和Sanjay Ghemawat,“MapReduce: Simplified Data Processing on Large Clusters”; pub. OSDI’04: Sixth Symposium on Operating System Design and Implementation, San Francisco, CA, December 2004。
Fay Chang、Jeffrey Dean、Sanjay Ghemawat、Wilson C. Hsieh、Deborah A. Wallach、Mike Burrows、Tushar Chandra、Andrew Fikes和Robert E. Gruber,“Bigtable: A Distributed Storage System for Structured Data”; pub. OSDI’06: Seventh Symposium on Operating System Design and Implementation, Seattle, WA, November 2006。
Mike Burrows,“The Chubby Lock Service for Loosely-Coupled Distributed Systems”; pub.OSDI’06: Seventh Symposium on Operating System Design and Implementation, Seattle, WA, November 2006。
Google 云端三大天王分別是: The Google File System, MapReduce, Bigtable
下面是中文翻译版
GFS:
MapReduce:
BigTale:
Google公布设计理念引起了开源开发者的广泛关注和浓厚兴趣。很快,虚拟主机,第一个模仿Google基础设施部分特性的开源软件就开发出来了,它的创建者正是开源搜索引擎Lucene的发明人。紧接着,Lucene的核心开发者们加入了Yahoo!,在那里,依靠众多开源贡献者的支持,参照Google的分布式计算架构,开发者们创建出了一个能够替代Google基础设施所有部分的开源产品,这就是Hadoop及其子项目和相关项目。
Google的论文激发了人们对并行大规模处理和分布式非关系型数据存储的兴趣,一年后,Amazon分享了他们的成功经验。2007年Amazon对外展示了它的分布式高可用、最终一致性数据存储,其名曰Dynamo。
有关Amazon Dynamo的内容可以参考如下论文:
Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swami Sivasubramanian, Peter Vosshall, and Werner Vogels,“Dynamo: Amazon’s Highly Available Key/value Store,”in the Proceedings of the 21st ACM Symposium on Operating Systems Principles, Stevenson, WA, October 2007。(中文版:点击下载)
此外,Amazon的CTO Werner Vogels在一篇博文中解释了Amazon Dynamo背后的关键思想,博文地址为:
大数据就现在而言,任何超过几个TB大小的数据集都可以归为大数据。这是数据集大到开始跨越多个存储单元的典型尺寸,也是传统RDBMS技术开始表现出吃力的尺寸。
随着数据规模的增长和数据创建来源的日趋多元化,以下挑战将日益严峻。
·高效存储和访问大量数据很难。额外要求的容错和备份使事情变得更加复杂。
·操作大数据集涉及大量并行进程。运行过程中要从任何故障中平稳恢复过来,同时还要在合理的时间范围内返回结果,这非常复杂。
·各种不同数据源生成的半结构化和无结构数据的schema和元数据持续不断变化,对它们的管理是一个令人头疼的问题。
可扩展性是一种能力,有了它系统能通过增加资源提高吞吐量进而解决增加的负荷。可扩展性可以通过两种方式实现,一是配置一个大而强的资源来满足额外的需求,二是依靠由普通机器组成的集群。使用大而强的机器通常属于垂直可扩展性。典型的垂直扩展方案是使用配有大量CPU内核且直接挂载大量存储的超级计算机。这类超级计算机通常极其昂贵,属于专有设备。替代垂直扩展的是水平扩展。水平扩展使用商业系统集群,集群随负载的增加而扩展。水平扩展通常需要添加额外的节点来应付额外的负载。大数据以及大规模并行处理数据的需要促使水平扩展得到了广泛的采纳。在Google、Amazon、Facebook、eBay和Yahoo!,水平扩展的基础设施包含数量巨大的服务器,其中一些包含几千甚至几十万台服务器。
对水平扩展集群上分布的数据进行处理是非常复杂的事情。在水平集群上处理大规模数据的方法里,MapReduce模型可能要算是最好的。