分布式系统
论文题目:NOSQL数据库
专    业                 
班    级                 
redis是nosql数据库吗
学    生                   
学    号                 
指导教师                  
       
          2014      秋季  学期

NoSQL数据库
1.引言 
随着互联网Web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,其相关产品的发展也非常迅速。传统的关系数据库在应付Web2.0网站时暴露了很多难以克服的问题,主要有包括:不能满足对数据库高并发读写的需求;不能满足对海量数据的高效率存储和访问的需求;不能满足对数据库的高可扩展性和高可用性的需求。另外,许多Web2.0网站并不需要关系数据库提供的一些服务,诸如:数据库事务一致性、数据库的写实时性和读实时性、对复杂的SQL查询等。因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生。
NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库. 无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。
2. NoSQL数据库类型 
2.1按照NoSQL存储模型和特点分类
按照NoSQL存储模型和特点分类形式如表1所示,表1 参照存储模型的NoSQL分类中根据NoSQL数据库的存储原理,列出了六大类主要的NoSQL数据库分类,分别是:列存储、文档型存储、Key-value存储、图存储、对象存储和xml存储。表1中仅列出了一些比较常见的NoSQL数据库,在所有的这些类型的NoSQL数据库中,当前应用较多的就是前三种类型:列存储类型、文档存储、key-value存储类型。特别需要说明的是,图数据库也可称为面向/基于图的数据库,对应的英文是Graph database。图数据库的基本含义是以“图”这种数据结构存储和查询数据,不是存储图片的数据库。
2.2根据CAP原理分类
CAP理论是设计分布式web系统的一个很关键的定律,在设计分布式Web服务中,通常需要考虑三个应用的属性:一致性、可用性以及分区宽容性。但是在实际的设计中,不可能
这三方面同时做的很好。下面详细介绍CAP理论中的三个属性:一致性,可以理解为在执行完一次写操作之后,未来的读操作一定可以读到这个新写入的值;可用性,可以理解为系统总是可读可写的;分区容错性,可以理解为系统被即便被分个成无法通信的系统节点仍 然可以正常工作,因此对于分布式系统而言,必须支持分区容错。NoSQL一定程度上就是基于这个理论提出来的,因为传统的SQL数据库(关系型数据库)都是都是具有ACID属性,对一致性要求很高,因此降低了A(availability)和P(partion tolerance),因此,为了提高系统性能和可扩展性,必须牺牲C(consistency),推翻关系型数据库中ACID这一套。 CAP理论的核心思想是一个数据库不可能同时满足一致性、可用性和分区容错性。依据CAP理论,从应用的需求不同,一般对数据库可以从三方面考虑:考虑CA,这就是传统上的关系型数据库(RMDB) ;考虑CP,主要是一些Key-value数据库,典型代表为google的Big Table;考虑AP,主要是一些面向文档的适用于分布式系统的数据库,如SimpleDB。 不同的应用场景必然会选择不同的NoSQL数据库来进行存储操作,例如对于大型网站尤其是SNS网站,对于数据的短期存储,可用性与分区容忍性优先级要高于数据一致性,一般会尽量朝着 AP 的方向设计,比如有名的Tokyo Cabinet就是AP理论的成功产品。 
根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类。满足CA原则的数据库有vertica;满足CP原则的数据库有MongoDB、HBase、Redis、BigTable、Hypertable、Terrastore、MemcacheDB、BerkeleyDB等;满足AP原则的数据库有Dynamo、CouchDB、SimpleDB、Cassandra等。采用NoSQL的新型存储架构选用NoSQL数据库必须根据特定的应用场景需求来确定。如果关系数据库在开发者的应用场景中很好的工作,并且开发人员又是非常善于使用和维护关系数据库的,那么笔者不建议开发人员采用NoSQL数据库;如果开发行业属于金融,电信等以数据为王的关键领域。目前使用的是Oracle数据库来提供高可靠性的,除非遇到特别大的瓶颈,不然笔者也建议不要贸然尝试NoSQL。 
然而,在WEB2.0的网站中,关系数据库大部分都出现了瓶颈。在磁盘IO、数据库可扩展上都花费了开发人员相当多的精力来优化,比如做分表分库、主从复制、异构复制等等,然而,这些工作需要的技术能力越来越高,也越来越具有挑战性。如果开发人员正在经历这些场合,那么笔者建议应该尝试一下NoSQL。 
如此多类型的NoSQL,而每种类型的NoSQL又有很多,到底选择什么类型的NoSQL来作
为存储管理工具并不是一个很好回答的问题,影响选择的因素有很多,而选择也可能有多种,随着业务场景,需求的变更可能选择又会变化。一般情况下,需要根据如下情况考虑:数据结构特点。包括结构化、半结构化、字段是否可能变更、是否有大文本字段、数据字段是否可能变化;写入特点。包括insert比例、update比例、是否经常更新数据的某一个小字段、原子更新需求;查询特点。包括查询的条件、查询热点的范围。比如用户信息的查询,可能就是随机的,而新闻的查询就是按照时间,越新的越频繁。 NoSQL作为镜像 不改变原有的以MySQL作为存储的架构,使用NoSQL作为辅助镜像存储,用NoSQL的优势辅助提升性能。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。