您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > NoSQL非关系型数据库技术和应用
NoSQL非关系型数据库技术和应用CONTENTS目录ONTENTSC1基础理论与架构分类2部署方案与性能分析3发展现状与未来趋势目录ONTENTSCCONTENTS123基础理论与架构分类部署方案与性能分析发展现状与未来趋势NoSQL数据库是非关系型数据存储的广义定义,它不同于符合ACID理论的关系型数据库,数据存储不需要固定的表结构,通常也不存在连接操作。NoSQL数据库不使用传统的关系数据库模型,而是使用如键值存储数据库、列存储数据库、文档型数据库、图形数据库等方式存储数据模型。基础理论与架构分类1NoSQL共同特征:1)不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式,当插入数据时,并不需要预先定义它们的模式;2)无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构,NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能;基础理论与架构分类13)弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移;4)分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题;基础理论与架构分类15)异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据;6)BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。基础理论与架构分类1NoSQL适用情况:1)数据模型比较简单;2)需要灵活性更强的IT系统;3)对数据库性能要求较高;4)不需要高度的数据一致性。基础理论与架构分类1CAP理论:CAP解释为一致性(consistency)、可用性(availability)和分区容忍性(partitiontolerance)。一致性:一个数据系统如何处理读写操作的一致性问题。分布式系统对于一致性的要求为当更新写入操作完成时,其余读取操作需要及时看到数据的更新;基础理论与架构分类1可用性:一个系统能够持续不间断使用的问题。严格定义上的高性能可用性意味着一个系统从设计到实施都应该能够提供可持续的操作;分区容忍性:一个系统在提供持续性操作时分区处理的能力。一旦开始将数据和逻辑分布在不同的节点上,就有形成分区的风险。假定网线被切断,就形成分区,在不同分区的节点A和节点B无法通信。由于Web提供的这种分布式能力,临时的分区是一个常见的情况,处理这种情况就属于分区容忍性。基础理论与架构分类1基础理论与架构分类1选择特征实例一致性+可用性2PC缓存验证单机数据库、集群数据库、LDAP、xFS一致性+分区容忍性乐观锁分布式系统、分布式锁、大部分的协议可用性+分区容忍性冲突解决,乐观化Coda(分布式档案系统)、网络缓存、DNS表1CAP理论应用及实例基础理论与架构分类1表2CAP理论数据库应用实例及功能分类选择例子对应功能分类一致性+可用性MySQL关系型数据库Vertica列存储数据库一致性+分区容忍性BigTable列存储数据库HBase列存储数据库MongoDB文档型数据库可用性+分区容忍性Dynamo键值存储数据库Cassandra列存储数据库BASE理论:传统ACID模式对于数据的属性要求非常高,在分布式系统中比较难以达到。所以在CAP理论的基础上,提出了BASE思想,对一致性进行概化处理。要解释BASE思想,首先要对ACID有一个了解,因为BASE是相对于DBMS中的ACID所提出来的新思想。基础理论与架构分类1ACID指的是传统数据库对于数据特性的要求。原子性:即事务执行作为原子,不可再分离,整个语句要么执行,要么不执行,不可能停在中间某个环节;一致性:在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏;隔离性:两个事务的执行互不干扰,也不会发生交互,一个事务不可能看到其他事务运行时中某一时刻的数据;持久性:在事务完成以后,该事务对数据库所做的更改便持久地保存在数据库之中,并不会被回滚。基础理论与架构分类1在数据库系统中,事务的ACID属性保证了数据库的一致性,如银行系统中,付款就是一个事务,从原账户扣除金额以及向目标账户添加金额,这两个数据库操作的总和构成一个完整的逻辑过程,为原子操作不可拆分,从而保证了整个系统中的总金额没有变化。但是ACID特性对于大型的分布式系统来说,与高性能是不兼容的。如在线购买商品的时候,任何一个人购物的过程都为一个原子操作,不允许存在两个人同时进行购物的情况。很明显对于绝大多数在线商城,这个方法并不适用。基础理论与架构分类1BASE思想实际上是CAP理论中AP的衍伸。它通过牺牲高一致性,保证高可用性和分区容忍性。BASE思想的组成有以下3个部分:基本可用、软状态、最终一致性。BASE模式指的是一个应用在任意时间首先应该能完成最基本化的工作(即基本可用),并不需要总是一致(即软状态),但最终应该是一致(即最终一致性)的。ACID和BASE应该被看作同一范畴内的互相补充品,而不是替代品。基础理论与架构分类1基础理论与架构分类1表3BASE与ACID的优缺点对比ACIDBASE高度一致弱一致,仅需要针对性数据高度分割化可用性第一位着重于“提交”一般注重网状事务较为激进弱可用性注重可用性较保守更简单扩展性不强更快,更具有扩展性NoSQL大致可以分为四类,分别为键值存储数据库、列存储数据库、文档型数据库和图形数据库。键值存储数据库键值存储典型实现的数据结构一般为数组链表:先通过通过hash算法得出hashcode,找到数组的某一个位置,然后插入链表的第一个位置。基础理论与架构分类1BigtableBigtable是一个稀疏、分布式、持久化存储的多维有序映射表,表的索引是行关键字、列关键字和时间戳。Bigtable中存储的表项都是未经解析的字节数组,其数据模型如下:(row:string,column:string,time:int64)-string基础理论与架构分类1示例:一个存储了大量网页及其相关信息的表Webtable,Webtable使用URL作为行关键字,使用网页的某些属性作为列名,网页的内容存入contents列中,并使用获取该网页的时间戳标识同一个网页的不同版本。基础理论与架构分类11)行关键字行关键字可以是任意字符串,目前最大支持64KB。Bigtable按照行关键字的字典序组织数据,利用这个特性可以通过选择合适的行关键字,使数据访问具有良好的局部性。表的行区间可以动态划分,每个行区间称为一个子表。子表是数据分布和负载均衡的基本单位,不同的子表可以有不同的大小。基础理论与架构分类12)列族列关键字一般都表示一种数据类型,列关键字的集合称作列族,列族是访问控制的基本单位。存储在同一列族下的数据属于同一种类型,列族下的数据被压缩在一起保存。数据在被存储之前必须先创建列族,并且表中的列族不宜过多,通常几百个,但表中可以有无限多个列。基础理论与架构分类13)时间戳Bigtable中的表项可以包含同一数据的不同版本,采用时间戳进行索引。时间戳是64位整型,既可以由系统赋值也可由用户指定。为了简化多版本数据的管理,每个列族都有两个设置参数用于版本的自动回收,用户可以指定保存最近N个版本,或保留足够新的版本(如最近7天的内容)。基础理论与架构分类1列存储数据库列数据库是对应并区别于行数据库的概念。行数据库就是我们所熟知的传统关系型数据库,即数据按记录存储,每一条记录的所有属性都存储在一起,如果要查询一条记录的一个属性值,需要先读取整条记录的数据。而列数据库是按数据库记录的列来组织和存储数据的,数据库中每个表由一组页链的集合组成,每条页链对应表中的一个存储列,而该页链中每一页存储的是该列的一个或多个值。基础理论与架构分类1HBaseHbase是运行在由多个节点构成的服务集群基础之上,为TB级甚至PB级别的数据存储提供支持,并为用户提供基于RowKey的高效查询机制,它是由一个一个RowKey作为唯一标识,并包含任意多例的一张表来根据存储的数据量以大小被分割成一个或多个称为region的子表.基础理论与架构分类1基础理论与架构分类1一个HBase集群通常由一个master和多个region组成,且每个regionServer管理一个或多个由master分配的region,而master则负责维护每个region的元信息,以及region和regionServer之间的映射关系。基础理论与架构分类1region中的数据最终将被存放在Hadoop的多副本分布式文件系统HDFS中,且每个值出现一个region,使得同一时间t内每个region只被分配给一台region服务器,就让所有行内的mutation操作都是原子操作,所有的put操作要么完全成功、要么完全失败,以及通过任何API返回行的内容总是一个完整的行,最后就使得跨行的mutation操作不是原子操作。基础理论与架构分类1进一步地,对于HBase的表与region表现为:表被动态地分割成region,且放在一个或多个region服务上,当region随着增大时,它们会被切分并平均分布在region服务器上,使得切分操作接近实时,则表现为从高负载节点迁移走,并且使错误的region节点会重新部署到正常节点上。同时,HBase采用Zookeeper协调服务,保存Hadoop的集群状态、故障或变更通知,并集成MapReduce,Jruby的命令外壳,使得HBase避开了HDFS只能append的限制,将最近更新的数据保存在内存中,逐步重写数据至新的文件中,并进行智能拆分与合并。基础理论与架构分类1文档型数据库文档型数据库的灵感是来自于LotusNotes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档、半结构化的文档以特定的格式存储,例如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而文档型数据库比键值数据库的查询效率更高,如:CouchDB,MongoDb。国内也有文档型数据库SequoiaDB,已经开源。基础理论与架构分类1MongoDBMongoDB是10gen公司研发的面向文档的开源的NoSQL数据库系统,用C++语言编写。它提供一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多功能,如辅助索引、范围查询和排序。MongoDB的功能非常丰富,比如内置的对MapReduce聚合的支持,以及对地理空间索引的支持。基础理论与架构分类1MongoDB的主要特性1)数据类型丰富。MongoDB是面向文档的数据库,放弃关系模型的一个主要原因是为了获得更加灵活的扩展性。它是无模式的,文档的键不会事先定义也不会固定不变,应用层可以方便地处理新增的键或丢失的键,为开发者变更数据模型提供极大的便利;2)功能丰富。支持辅助索引、存储JavaScript和MapReduce等其他聚合工具的独特功能;基础理论与架构分类13)容易扩展。MongoDB在设计时考虑了系统扩展的问题,面向文档的数据模型可以自动在多台服务器之间进行分割。通过其Auto-Sharding机制,可以自动实现集群的数据和负载均衡;4)性能卓越。MongoDB对文档进行自动动态填充,预分配数据文件,用空间换取性能的稳定。默认的存储引擎中使用了内存映射文件,将内存的管理工作交给操作系统去处理。基础理论与架构分类15)管理简便。尽可能的让服务器自动配置,通过复制机制来提升系统的可靠性。MongoDB的核心概念是文档,多个键及其相应的值有序地存放在一起组成文档,文档类似于关系型数据库中的元组。多个文档组成集合,集合如同关系型数据库中的表。多个集合组成数据库,一个MongoDB
本文标题:NoSQL非关系型数据库技术和应用
链接地址:https://www.777doc.com/doc-6182108 .html