NoSQL数据库总结

之前在学校跟团队里的同学在交流的时候偶然间听到redis数据库这个新名词,过后自己对这个新名词产生了一定的好奇并开始去查阅了相关的资料,在学习了redis之后还尝试在自己之前写过的一个基于web平台开发的商城小项目之中采用redis进行缓存处理。也算是有了一点点小收获,趁着假期时间一定要好好沉淀一下之前学到的知识。

NoSQL概述

NoSQL,泛指非关系型的数据库。NoSQL=(Not only SQL),顾名思义,NoSQL意味着不仅仅是SQL,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

为什么会有NoSQL数据库的兴起?

纵观历史长河,每一项新技术的产生与兴起都有其时代的背景,正如同早期java web开发一般,因为EJB的臃肿难用而诞生了以spring为首的各大轻量级web框架的流行。当然,这里NoSQL的诞生的目的并不是为了取代传统的关系型数据库,NoSQL也并不能取代关系型数据库的地位。对于用户的基本信息等重要信息还是需要存储到关系型数据库中。

对于NoSQL数据库的兴起,可以大概总结为以下几点:

  1. 对数据库高并发读写的要求:web2.0网站要根据用户个性化信息来实时生成动态页面和生成动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求,关系型数据库在应对上万次查询还勉强顶得住,但在应对上万次写SQL请求的时候就有点捉襟见肘了,硬盘的IO也就难以承受了。对于一个普通的BBS网站,往往也存在着对高并发请求的需求,例如网站需要实时统计在线用户的数量,记录热门帖子的点击次数,投票计数等因此对数据库高并发读写的需求俨然成为一个迫切的需求。
  2. 对海量数据的高效率存储和访问需求:类似Facebook,Twitter这样的SNS网站,每天用户都产生了海量的用户动态,当系统需要在这样存储数以亿计的关系型数据表中使用SQL查询相应的数据时,其效率是极其低下乃至难以忍受的。再如同腾讯,盛大等大型的登录系统这些有着动辄以亿计的账号,关系型数据库也难以应对。
  3. 对数据库的高可用性和高扩展性的要求:在基于web的架构中,数据库是最难以进行横向扩展的,当一个应用系统的用户数量以及访问量与日俱增的时候,你的数据库却无法像web server或者app server那样简单地通过添加更多的硬件和服务节点来扩展性能和负载能力。对于许多需要进行24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要进行停机维护或者数据迁移。NoSQL数据库的产生无疑让人们看到解决问题的希望。

目前NoSQL数据库的主要分类:

键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

主要适用场景:内容缓存,主要用于处理大量数据的高访问负载

优势:快速查询

劣势:数据无结构化,通常只被当作字符串或者二进制数据

列存储数据库。

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

主要适用场景;分布式的文件系统

优势:查找速度快,可扩展性强,更容易进行分布式扩展

劣势:功能相对局限

文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

主要适用场景:web 应用

优势:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构

劣势:查询性能不高,而且缺乏统一的查询语法

图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.

主要适用场景:社交网络

优势:利用图结构相关算法

劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案

 

NoSQL数据库在以下条件比较适用

1、数据模型比较简单;

2、需要灵活性更强的IT系统;

3、对数据库性能要求较高;

4、不需要高度的数据一致性;

5、对于给定key,比较容易映射复杂值的环境。

 

 

 

你可能感兴趣的:(数据库)