4月
09
2011

NoSQL简介

传统关系型数据库面临很多问题。

1、需要很高的实时插入性能:在高并发读写环境下,每秒上万次读请求勉强可以支撑,但是在每秒上万次写请求之下,硬盘I/O将无法承受。

2、需要海量数据存储能力的同时还需要非常快的查询检索速度:在一个表中存储数以亿计的记录后,使用SQL查询的效率是极为低下的。

3、需要将数据存储无缝扩展到整个集群:数据库的横向扩展比较困难,往往需要停机维护和数据迁移,不能像Web服务器那样简单地通过增加服务器数量来减轻负载。

针对高并发读写海量存储以及可扩展性三个方向,有不同的NoSQL解决方案,这里对每个方向分别简要介绍了Redis、MongoDB、Cassandra三款NoSQL数据库。

高并发读写性能

Redis是基于Key-Value类型的内存数据库,数据都存放在内存中,定期通过异步同步将数据flush到硬盘上,内存操作避免了较慢的硬盘I/O,测试数据每秒可以处理10万个读写请求,是目前最快的Key-Value数据库之一。

Redis还支持存储List、Set结构并原生支持对它们的一些操作。

Redis最大的缺点是依赖物理内存,不适合存储大量数据。针对这个问题,Redis 2.0开发了虚拟内存的特性,将不经常使用的数据存放到硬盘上。

Redis没有采用操作系统的虚拟内存,主要是考虑到页中可能包含多个对象,而想写入硬盘的只有那些不常用的,以页为单位进行交换很难把握,另外Redis自己的虚拟内存可以在写入硬盘时去掉对象一些不必要的属性,官方说法是对象可以比内存中的大小小10倍。

海量存储

MongoDB是目前比较流行的面向文档的数据库,数据库的交互采用和JSON语法非常类似的BSON格式。

MongoDB支持存放比较复杂的对象类型,查询语法和面向对象语言的很像,也支持索引功能。官方文档的测试中当数据量达到50GB以上时,访问速度是MySQL的10倍以上,大约每秒可以处理0.5万~1.5万次的读写请求。

MongoDB自带GridFS支持分布式的海量存储。目前很多站点都采用或者准备往MongoDB迁移。

可扩展性

Cassandra是Facebook开源的产品,包括Facebook和Twitter都在用。它是基于分布式的一个数据库。写的时候写请求从客户端到达一个随机节点,先写日志再将写内容复制到若干个节点,保证当某些节点损坏时仍然可以获取数据。读请求到达随机节点后会被路由到某个节点上获取数据。

高扩展性体现在需要扩展数据库时增加节点就可以。Cassandra的读写性能并不是最优秀的,但是分布式的可扩展性弥补了这个缺陷。

Written by Hesey Wang in: 技术,数据库 |

没有评论 »

RSS feed for comments on this post. TrackBack URL

Leave a comment

©2006 - 2016 Hesey (舒)