【Redis学习】:NoSQL概述

来源:互联网 发布:数控火焰切割手动编程 编辑:程序博客网 时间:2024/05/22 12:31

      NoSQL简介 

      NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别

超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的

据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类

带来的挑战,尤其是大数据应用难题。

       虽然NoSQL火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动。尽管早期的堆栈代码只能算

是一种实验,然而现在的系统已经更加的成熟、稳定。不过现在也面临着一个严酷的事实:技术越来越成熟——以至

于原来很好的NoSQL数据存储不得不进行重写,也有少数人认为这就是所谓的2.0版本。这里列出一些比较知名的工

具,可以为大数据建立快速、可扩展的存储库。

       

       NoSQL基本含义

       NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。在现代的计算系统上每天网络上都会产生庞大的

数据量。这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理。 1970年 E.F.Codd's提出的关系模型

的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。

       通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在

网络和商务应用的主导技术。

       NoSQL是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提

倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

       

       关系型数据库遵循ACID规则

       事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

       1、A (Atomicity) 原子性

        原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操

作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

        比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这

步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

        2、C (Consistency) 一致性

        一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

        例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,

否则事务失败。

        3、I (Isolation) 独立性

        所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另

外一个事务未提交,它所访问的数据就不受未提交事务的影响。

        比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是

看不到新增加的100元的。

        4、D (Durability) 持久性

       持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

       

       分布式系统

       分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)

组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明

性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应

用在在不同的平台上如:Pc、工作站、局域网和广域网上等。

       分布式计算的优点

       可靠性(容错) :

       分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。

       可扩展性:

       在分布式计算系统可以根据需要增加更多的机器。

       资源共享:

       共享数据是必不可少的应用,如银行,预订系统。

       灵活性:

       由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。

       更快的速度:

       分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。

       开放系统:

       由于它是开放的系统,本地或者远程都可以访问到该服务。

       更高的性能:

       相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。

       分布式计算的缺点

       故障排除: 

       故障排除和诊断问题。

       软件: 

       更少的软件支持是分布式计算系统的主要缺点。

       网络:

       网络基础设施的问题,包括:传输问题,高负载,信息丢失等。

       安全性: 

       开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。


       什么是NoSQL?

       NoSQL,指的是非关系型的数据库。NoSQL是Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库

管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数

据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。


       为什么使用NoSQL ?

       今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,

社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那

SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。

       

       实例

       社会化关系网:

Each record: UserID1, UserID2 
Separate records: UserID, first_name,last_name, age, gender,... 
Task: Find all friends of friends of friends of ... friends of a given user.

       Wikipedia 页面 :

Large collection of documents 
Combination of structured and unstructured data 
Task: Retrieve all pages regarding athletics of Summer Olympic before 1950.


       RDBMS vs NoSQL

       RDBMS 

       高度组织化结构化数据 

       结构化查询语言(SQL) (SQL) 

       数据和关系都存储在单独的表中 

       数据操纵语言,数据定义语言 

       严格的一致性

       基础事务

       NoSQL 

       代表着不仅仅是SQL

       没有声明性查询语言

       没有预定义的模式

       键-值对存储,列存储,文档存储,图形数据库

       最终一致性,而非ACID属性

       非结构化和不可预知的数据

       CAP定理 

       高性能,高可用性和可伸缩性

       



       NoSQL简史

       NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。

       2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再

次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

       2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world

 where relational=false;"。因此,对      NoSQL最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据

库的优点,而不是单纯的反对RDBMS。


       CAP定理(CAP theorem)

       在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布

式计算系统来说,不可能同时满足以下三点:

       一致性(Consistency) (所有节点在同一时间具有相同的数据)

       可用性(Availability) (保证每个请求不管成功或者失败都有响应)

       分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

       CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能

同时较好的满足两个。因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:

       CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大

       CP - 满足一致性,分区容忍性的系统,通常性能不是特别高

       AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些

       


       NoSQL的优点与缺点

       优点:

       高可扩展性

       分布式计算

       低成本

       架构的灵活性,半结构化数据

       没有复杂的关系

       缺点:

       没有标准化

       有限的查询功能(到目前为止)

       最终一致是不直观的程序


       BASE

       BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。

       CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能

同时较好的满足两个。

       BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:

       Basically Availble --基本可用

       Soft-state --软状态/柔性事务。 "Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的

       Eventual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的

       

       ACID vs BASE

             


       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,已经开源。

        图形(Graph)数据库

        图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个

服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都

有REST式的数据接口或者查询API。 如:Neo4J, InfoGrid, Infinite Graph。

        

        

        NoSQL共同特征

        对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:

        不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。

当插入数据时,并不需要预先定义它们的模式。

       无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地

服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。

       弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。

       分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且

通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。

       异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快

地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能

会丢失少量的数据。

       BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。

       NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关

系型数据库和其他的NoSQL。


       NoSQL适用场景

       NoSQL数据库在以下的这几种情况下比较适用:

       1、数据模型比较简单;

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

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

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

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

       NoSQL发展现状

       计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而NoSQL致力于改变这一现状。Google的

 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。

       NoSQL项目的名字上看不出什么相同之处,但是,它们通常在某些方面相同:它们可以处理超大量的数据。这场

革命仍然需要等待。的确,NoSQL对大型企业来说还不是主流,但是,一两年之后很可能就会变个样子。在NoSQL

运动的最新一次聚会中,来自世界各地的150人挤满了CBS Interactive的一间会议室。分享他们如何推翻缓慢而昂贵

的关系数据库的暴政的经验,怎样使用更有效和更便宜的方法来管理数据。

     “关系型数据库给你强加了太多东西。它们要你强行修改对象数据,以满足RDBMS (relational database

 management system,关系型数据库管理系统)的需要,”在NoSQL拥护者们看来,基于NoSQL的替代方案“只

是给你所需要的”。水平扩展性(horizontal scalability)指能够连接多个软硬件的特性,这样可以将多个服务器从逻辑

上看成一个实体。


       NoSQL挑战

       尽管大多数NoSQL数据存储系统都已被部署于实际应用中,但归纳其研究现状,还有许多挑战性问题。

       已有key-value数据库产品大多是面向特定应用自治构建的,缺乏通用性;

       已有产品支持的功能有限(不支持事务特性),导致其应用具有一定的局限性;

       已有一些研究成果和改进的NoSQL数据存储系统,但它们都是针对不同应用需求而提出的相应解决方案,如支持

组内事务特性、弹性事务等,很少从全局考虑系统的通用性,也没有形成系列化的研究成果;

       缺乏类似关系数据库所具有的强有力的理论(如armstrong公理系统)、技术(如成熟的基于启发式的优化策略、

两段封锁协议等)、标准规范(如SQL语言)的支持。

       目前,HBase数据库时安全特性最完善的NoSQL数据库产品之一,而其他的NoSQL数据库多数没有提供内建的

安全机制,但随着NoSQL的发展,越来越多的人开始意识到安全的重要,部分NoSQL产品逐渐开始提供一些安全方

面的支持。

       随着云计算、互联网等技术的发展,大数据广泛存在,同时也呈现出了许多云环境下的新型应用,如社交网络

网、移动服务、协作编辑等。这些新型应用对海量数据管理或称云数据管理系统也提出了新的需求,如事务的支持、

系统的弹性等。同时云计算时代海量数据管理系统的设计目标为可扩展性、弹性、容错性、自管理性和“强一致

性”。目前,已有系统通过支持可随意增减节点来满足可扩展性;通过副本策略保证系统的容错性;基于监测的状态

消息协调实现系统的自管理性。“弹性”的目标是满足Pay-per-use 模型,以提高系统资源的利用率。该特性是已有

典型NoSQL数据库系统所不完善的,但却是云系统应具有的典型特点;“强一致性”主要是新应用的需求。

       

1 0
原创粉丝点击