NoSQL运动:数据库架构抉择

导读:Mike Loukides是O'Reilly传媒的内容战略副总裁,他对编程语言和UNIX系统管理很是感兴趣,著做有System Performance TuningUnix Power Tools。本文中,Mike Loukides提出了本身对NoSQL的精辟看法,并对现代数据库架构的方方面面进行了深刻思考。html

在去年的一次谈话中,basho公司的CTO Justin Sheehy认为,NoSQL是一场运动,而非技术。我马上深表赞同,由于以往关于NoSQL的探讨并不舒心。sql

那么,为何说NoSQL是一场运动,而非技术呢?Justin的说法直截了当:之因此说NoSQL是一场运动,是由于这是对数据库架构的选择。任何一种单一的技术主题,反而会掩盖NoSQL运动的实质。数据库

自八十年代以来,关系型数据库(如SQL Server、Oracle和DB2)一直都是后端业务系统的主导。这些关系型数据库产品都很是优秀,它们之间有许多共通之处。编程

回顾一下以往15年的软件开发历程,咱们已经构建了许多优秀的大型数据库应用,其中不乏Web应用。可是自关系型数据库诞生以来,数据库领域已经产生了许多变化:后端

  • 数据激增。虽然存储的容量和CPU的速度都在飞速发展,使得数据库能够应对数据量的激增,可是数据量的确是一个棘手的问题,对于任何重要的数据库而言,分布式必不可少。
  • 亚秒级的查询响应。在八十年代,数据库查询以批处理的方式运行,查询效率低下。如今的互联网,已经从静态文件发展到由复杂数据库支撑的站点,并且对于大多数查询,咱们须要亚秒级的响应时间。
  • 7*24小时正常运行。为静态HTML文件设置冗余服务器很是容易,但复杂的数据库复制就另当别论了。
  • 对高速数据流的捕捉愈来愈重要。许多应用的后台数据库吸纳数据的速度远远快于处理数据查询的速度。好比,在日志应用或者分布式传感应用数据库中,写入比查询频繁的多。ETL(数据提取、转换和加载)当然不可或缺,但对高速数据流的捕捉显得愈来愈重要。
  • 非结构化数据。非结构化数据早就存在,并非数据世界里的新景观,但咱们愈来愈不但愿强制数据结构。
  • 牺牲ACID。ACID(原子性、一致性、隔离性、持久性)虽然很重要,但现代应用带来的挑战让咱们意识到,为了实现其它特性(如低延迟和可用性),咱们必须作出牺牲。

需求的不断变化,迫使咱们不得不思考全新的数据库解决方案:数组

  • 分布式。庞大的数据库只是采用分布式的一个缘由,另外一个缘由是现代应用(尤为是Web应用)要求知足许多在线用户的瞬时响应。响应时间每超时一秒,都会形成大量用户流失。
  • 实时计算。若是你正经过构建在线应用支持业务分析,那么用户必然指望实时业务分析。这不只便捷,天天执行成百上千的查询,完全改观了咱们的工做。
  • 可扩展性。若是你正在构建一个面向客户的应用,进行业务分析,那么可扩展性是一个大问题。垂直可扩展性已经近乎极限,物理定律的制约使得Intel架构的时钟频率在3.5GHz的范围内徘徊不前,水平可扩展性(构建多节点分布式系统)成了惟一的途径。
  • 高可用性。应用系统架构中的任何一部分出现单点故障,都会致使灾难性的后果,数据库系统必须提供高可用性支持。一个高可用性系统自然就是一个分布式系统。
  • 数据分片。对于一个给定的分布式数据库,接下来的问题就是数据分片。关系型数据库在多台主机之间采用手动分片,或者基于数据自己的某些属性对数据集进行分区。MongoDB很是容易进行数据分片,HBase、Riak和Cassandra自己就是分布式数据库。
  • Schemaless(无模式)。NoSQL数据库一般称为schemaless(无模式),由于它们与关系型数据库的架构形态无关。事实上,NoSQL并不是彻底无模式。在像CouchDB或MongoDB这样的文档数据库中,文档是许多键值对(key-value)。Riak也能够被看作是一个文档数据库,但比文档类型更灵活。Cassandra和HBase被称为面向列的数据库。在大多数应用开发中,NoSQL数据库前期规划更少,灵活性更大,更适合敏捷开发。
  • ACID和CAP。ACID属性深刻人心,但若是咱们仔细思考数据库的架构,就会发现对一个分布式系统实现一致性和隔离性等ACID属性很是困难。ACID属性很是重要,但自由的选择须要折中。CAP定律指出,对于一个分布式计算系统,一致性、可用性和分区容错性只能同时知足其中两者。
  • 脚本语言。全部的关系型数据库都有SQL语言变种(例如,T-SQL和PL/SQL)做为数据脚本语言。在非关系型数据库的世界里,也有一些脚本语言可用。CouchDB和Riak支持JavaScript脚本,MongoDB也是如此。Hadoop项目分裂出的几个脚本编程语言项目(包括Pig和Hive)适用于HBase。Redis项目正在试验集成Lua脚本语言。
  • RESTful接口。只有CouchDB和Riak提供了RESTful接口。
  • 图形。Neo4J是一个为维护图形而专门设计的数据库。图形是很是灵活的数据结构,图数据库能够模拟其它任何类型的数据库。
  • SQL。咱们一直在探讨NoSQL运动,但也没法忽略SQL这门熟悉的编程语言。有人正在致力于将SQL移植到Hadoop之上,也许咱们将来会采用混合的数据库架构。
  • 科学数据。SciDB是一个面向大型科研应用的数据库项目,其存储模型基于多维数组。SciDB的存储能够轻松扩展到数百PB,每晚收集数十TB的数据。
  • 混合架构。 NoSQL运动与数据库架构的选择息息相关。也许最后的数据库架构选择是混合架构,而不是某种单一的数据库技术。只有选择混合架构,才能博采众长,与技术的发展相适应。混合架构是在传统电子商务站点中融入社会化特性的最佳方式。

写在最后bash

NoSQL运动引起了咱们的思考,究竟什么才是咱们想要的数据库架构解决方案。也许咱们最终会明白,没有放之四海而皆准的真理。(张志平/编译)服务器

原文连接:http://radar.oreilly.com/2012/02/nosql-non-relational-database.html数据结构