1 引言

随着云计算时代的到来,各种类型的互联网应用层出不穷,对与此相关的数据模型、分布式架构、数 据存储等数据库相关的技术指标也提出了新的要求。虽然传统的关系型数据库已在数据存储方面占据了不可动摇的地位,但由于其天生的限制,已经越来越无法满足 云计算时代对数据扩展、读写速度、支撑容量以及建设和运营成本的要求。云计算时代对数据库技术提出了新的需求,主要表现在以下几个方面。

●海量数据处理:对类似搜索引擎和电信运营商级的经营分析系统这样大型的应用而言,需要能够处理PB级的数据,同时应对百万级的流量。

●大规模集群管理:分布式应用可以更加简单地部署、应用和管理。

●低延迟读写速度:快速的响应速度能够极大地提高用户的满意度。

●建设及运营成本:云计算应用的基本要求是希望在硬件成本、软件成本以及人力成本方面都有大幅度的降低。

2 关系型数据库的劣势分析

随着Web2.0的发展,传统的关系型数据库在应对超大规模和高并发的SNS类型的网站方面暴露了许多难以克服的问题,主要表现在以下方面。

(1)高并发读写速度慢

这种情况主要发生在数据量达到一定规模时,由于关系型数据库的系统逻辑非常复杂,使得其非常容 易发生死锁等并发问题,导致其读写速度下降非常严重。例如,Web2.0网站要根据用户个性化信息来实时生成动态页面、提供动态信息,所以基本上无法使用 动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系型数据库勉强可以应付上万次SQL查询,硬盘I/O往往无法承担上万 次的SQL写数据请求。

(2)支撑容量有限

类似Facebook、Twitter这样的SNS网站,用户每天产生海量的用户动态,每月会产生几亿条用户动态,对于关系型数据库来说,在一张数亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。

(3)扩展性差

在 基于Web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,传统的关系型数据库却没有办法像Web Server那样简单地通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛 苦的事情,往往需要停机维护和数据迁移,因此迫切需要关系型数据库也能够通过不断添加服务器节点来实现扩展。

(4)建设和运维成本高

企业级数据库的价格很高,并且随着系统的规模增大而不断上升。高昂的建设和运维成本无法满足云计算应用对数据库的需求。

关系型数据库遇到上述难以克服的瓶颈,与此同时,它的很多主要特性在云计算应用中却往往无用武之地,例如:数据库事务一致性、数据库的写实时性和读实时性、复杂的SQL查询特别是多表关联查询。因此,传统的关系型数据库已经无法独立应付云计算时代的各种应用。

3 NoSQL数据库数据模型

关系型数据库越来越无法满足云计算的应用场景,为了解决此类问题,非关系型数据库应运而生,由 于在设计上和传统的关系型数据库相比有了很大的不同,所以此类数据库被称为“NoSQL(Not only SQL)”系列数据库。与关系型数据库相比,它们非常关注对数据高并发读写和海量数据的存储,在架构和数据模型方面作了简化,而在扩展和并发等方面作了增 强。目前,主流的NoSQL数据库包括BigTable、HBase、Cassandra、SimpleDB、CouchDB、MongoDB以及 Redis等。NoSQL常用数据模型包括以下3种。

(1)Column-oriented(列式)

列式主要使用Table这样的模型,但是它并不支持类似Join这样多表的操作,它的主要特点 是在存储数据时,主要围绕着“列(Column)”,而不是像传统的关系型数据库那样根据“行(Row)”进行存储,也就是说,属于同一列的数据会尽可能 地存储在硬盘同一个页中,而不是将属于同一个行的数据存放在一起。这样做的好处是,对于很多类似数据仓库的应用,虽然每次查询都会处理很多数据,但是每次 所涉及的列并没有很多。使用列式数据库,将会节省大量I/O,并且大多数列式数据库都支持Column Family这个特性,能将多个列并为一个小组。这样做的好处是能将相似列放在一起存储,提高这些列的存储和查询效率。总体而言,这种数据模型的优点是比 较适合汇总和数据仓库这类应用。

(2)Key-value

虽然Key-value这种模型和传统的关系型相比较简单,有点类似常见的 HashTable,一个Key对应一个Value,但是它能提供非常快的查询速度、大的数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改 等操作,虽然不支持复杂的操作,但是可以通过上层的开发来弥补这个缺陷。

(3)Document(文档)

在结构上,Document和Key-value是非常相似的,也是一个Key对应一个 Value,但是这个Value主要以JSON或者XML等格式的文档来进行存储,是有语义的,并且Document DB一般可以对Value来创建Secondary Index来方便上层的应用,而这点是普通Key-Value DB所无法支持的。

4 常用NoSQL数据库比较及优劣势分析

 4.1主要NoSQL数据库比较

从设计理念、数据模式、分布式等几个角度对BigTable、Cassandra、Redis、MongoDB进行比较,见表1。

 

4.2 NoSQL数据库的优势分析

 NoSQL数据库主要有以下优势:

●扩展简单,典型例子是Cassandra,由于其架构类似于经典的P2P,因此能够通过简单添加新的节点来扩展集群;

●读写快速,典型例子是Redis,由于其逻辑简单,纯内存操作,因此其具有非常出色的性能,单节点每秒可以处理超过10万次的读写操作;

●成本低廉,因为大多数NoSQL数据库都是开源软件,没有昂贵的成本限制。

4.3NoSQL数据库的劣势分析

虽然NoSQL具有很多显著的优势,但是依然存在很多不足,主要表现在:

●不提供对SQL的支持,将会对用户产生一定的应用迁移成本,同时,无法实现组合应用,发挥SQL数据库已经非常成熟的优势;

●支持的特性不够丰富,现有NoSQL数据库提供的功能十分有限,大多数都不支持事务和其他附加功能;

●产品不够成熟,大多数NoSQL数据库产品还处于初级阶段,与已经非常完善成熟的关系型数据库不可同日而语。

5 结束语

云计算主要常见的有两类场景:需要低延迟和高并发的读写能力,数据量虽大,但不超过TB级别, 大部分现在使用RDBMS的Web应用基本上都属于这一类,类似传统的OLTP(联机事务处理);海量数据的存储和操作,如PB级别的,这方面的例子有传 统的数据仓库、Google海量的Web页面和图片存储等,类似传统的OLAP(联机分析处理)。目前,业界还没有一款数据库能同时适应上述多种云计算场 景的NoSQL数据库。考虑到PaaS平台的需求比较复杂,能够在后台进行定制化的数据库将是未来发展的趋势,因此,轻量级的、兼顾高可扩展和高可靠性的 架构设计将会受到欢迎。

本文来自:http://www.ttm.com.cn