论文:非关系数据库(NoSQL)应用探讨

  • 格式:pdf
  • 大小:176.42 KB
  • 文档页数:8

非关系数据库(NoSQL)应用探讨

目录

前言:NoSQL产生的背景........................................................................3

一、当前数据库应用层面需求带来的新挑战.........................................3

1.1对数据库高并发读写的需求........................................................3

1.2对海量数据的高效率存储和访问的需求....................................4

1.3对数据库的高可扩展性和高可用性的需求................................4

二、NoSQL数据库的特性........................................................................4

2.1易扩展............................................................................................4

2.2大数据量,高性能........................................................................4

2.3灵活的数据模型............................................................................5

2.4高可用............................................................................................5

三、热门Nosql数据库简介......................................................................5

3.1Redis................................................................................................5

3.2MongoDB........................................................................................6

3.3Cassandra.........................................................................................7

四、总结......................................................................................................8前言:NoSQL产生的背景随着社交网站、移动互联网等互联网应用的兴起,关系型数据库正面临极大的挑战,用

户对关系型数据库提出更高的要求,倒如:对数据库高并发读写的需求、对海量数据的高效

率存储和访问的需求、对数据库的高可扩展性和高可用性的需求等等。非关系型数据库(本

文中部分将使用NoSQL代指,NoSQl即NotOnlySQL)正是在这种新变化之下产生的一种非

关系型数据库产品的总称。非关系型的数据库现在成了一个极其热门的新领域,相关非关系

数据库产品的发展非常迅速。

NoSQL数据库的出现打破了长久以来关系型数据库大一统的局面。NoSQL数据存储不需

要固定的表结构,通常也不存在连接操作。在当前热门的应用如大数据、云计算等数据存取上具有众多关系型数据库无法比拟的性能优势。

当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求。而NoSQL存储就是

为了实现这个需求。Google的BigTable与Amazon的Dynamo是非常成功的商业NoSQL实

现。一些开源的NoSQL体系,如Facebook的Cassandra,Apache的HBase,也得到了广

泛认同。

一、当前数据库应用层面需求带来的新挑战

1.1对数据库高并发读写的需求

WEB2.0网站是一种以用户互动产生内容的新形式的互联网应用方式,要求能实时生成动

态页面和展示动态内容,所以基本上都使用诸如asp/.net、PHP等开发的动态网站。在实际

应用中,WEB2.0网站的数据库并发负载非常高,往往要达到每秒上万次读写请求。传统关系

数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘高并发的

并发读写操作就已经无法承受了。就连一个简简单单的BBS网站,也存在对高并发写请求的

需求,例如Discuz!网站的实时统计在线用户状态,记录帖子的点击次数,空间访问计数等。1.2对海量数据的高效率存储和访问的需求类似人人网,新浪微博,QQ空间这样的SNS网站,每天用户产生海量的数据就以

TB(1TB=1024GB)数量级别的,以新浪微博为例,每天用户刷微博特别容易,但是这造成的后

果是每天新增的数据量都是百万级的、上千万级的这样一个量。这样你经常要面对的一个问

题就是增加服务器,因为一般一台MySQL服务器,它可能支撑的规模也就是几千万,或者说

复杂一点只有几百万,这样,你可能每天都要增加服务器,从而解决所你面对的这些问题。

1.3对数据库的高可扩展性和高可用性的需求在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访

问量与日俱增的时候,你的数据库却没有办法像webserver和appserver那样简单的通过

添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的

网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,

为什么数据库不能通过不断的添加服务器节点来实现扩展呢?

二、NoSQL数据库的特性

2.1易扩展

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据

之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

2.2大数据量,高性能NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于

它的无关系性,数据库的结构简单。一般MySQL使用QueryCache,每次表的更新Cache

就失效,是一种大粒度的Cache,在针对WEB2.0等交互频繁的应用中,Cache性能不高。而

NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性

能高很多了。2.3灵活的数据模型NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系

数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是

一个噩梦。这点在大数据量的web2.0时代尤其明显。

2.4高可用

NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra、HBase

模型,通过复制模型也能实现高可用。

三、热门Nosql数据库简介现在这两年,各种各样非关系数据库,特别是键值数据库(Key-ValueStoreDB)风起云

涌,多得让人眼花缭乱。目前市面长流行的起码有超过10个开源的NoSQL数据库,例如:

Redis,TokyoCabinet,Cassandra,Voldemort,MongoDB,Dynomite,HBase,CouchDB,

Hypertable等等。

这些NoSQL数据库,有的是用C/C++编写的,有的是用Java编写的,还有的是用Erlang编写的,每个都有自己的独到之处,下面介绍几种有特殊的NoSQL数据库:

3.1Redis

Redis是一个很新的项目,刚刚发布了1.0版本。Redis本质上是一个Key-Value类型

的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步

操作把数据库数据保存到硬盘上进行保存。

Redis数据库的特性:

1)高性能读写:因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万

次读写操作,是我知道的性能最快的Key-ValueDB。2)支持保存List链表和Set集合的数据结构,而且还支持对List进行各种操作:Redis

的出色之处不仅仅是性能,Redis最大的魅力是支持保存List链表和Set集合的数据结构,

而且还支持对List进行各种操作:例如从List两端push和pop数据,取List区间,排序

等等,对Set支持各种集合的并集交集操作,

3)value可以存1G:单个value的最大限制是1GB,不像memcached只能保存1MB的数据,

因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一

个轻量级的高性能消息队列服务,用他的Set可以做高性能的tag系统等等。

4)加强版的memcached来用:另外Redis也可以对存入的Key-Value设置expire时间,

因此也可以被当作一个功能加强版的memcached来用。

3.2MongoDB

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功

能最丰富,最像关系数据库的。

Redis数据库的特性:

1)支持的数据结构非常松散,是类似json的bjson格式(BJSON全称:Binary

JSON,BJSON把文件的二进制格式的数据直接保存到MongoDB的文档结构中),因此可以存储

比较复杂的数据类型。

2)支持的查询语言非常强大,Mongo最大的特点是他支持的查询语言非常强大,其语法

有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,

而且还支持对数据建立索引。

3)海量数据的访问效率,Mongo主要解决的是海量数据的访问效率问题,根据官方的

文档,当数据量达到50GB以上的时候,Mongo的数据库访问速度是MySQL的10倍以上。Mongo

的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万-

1.5次读写请求。对于Mongo的并发读写性能,我(robbin)也打算有空的时候好好测试一

下。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件