数据库系统、衡量标准与No-sql定位

来源:互联网 发布:端口号范围 编辑:程序博客网 时间:2024/06/01 07:55


一、数据库管理系统的组成

数据库管理系统包括五个方面:

1.是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据,简称DBMS;

2.DBMS对数据进行统一的管理和控制,以保证数据的安全性和完整性;

3.用户通过DBMS访问数据库中数据,管理员也通过DBMS进行数据库维护工作;

4.DBMS可以使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和查询数据;

5.DBMS提供数据定义语言DDL,数据库操作语言DML,提供权限与约束,进行添删改查;

 

二、衡量数据库的标准

上面明确了数据库系统的组成,但目前似乎有一个趋势:只要做数据处理,软件规模达到一定程度,似乎都称为了数据库,如HBase/MOngDB等。

但这些软件是否真的就是传统意义上的数据库,即需要明确两个概念:交易和事务属性。

在数据库系统中,一个交易是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个交易,具有ACID特性。ACID的概念在ISO/IEC10026-1:1992文件的第四段内有所说明。

  

衡量是否是数据库的标准:

ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:

1)原子性(Atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

2)一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的默认规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

3)隔离性(Isolation):当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时所表现出的相互关系。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

4)持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。

 


 三、NoSQL的CAP理论

NOSQL是基于CAP理论,CAP原则是Nosql数据库的基石:

C一致性(Consistency)在分布式系统中的所有数据备份,在同一时刻是否同样的值,任何一个读操作都是读到相同的值;

A可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(可用性不仅包括读,还有写),每个操作可以在任何时刻返回;

P分区容忍性(Partitiontolerance):集群中的某些节点在无法联系后,集群整体是否还能继续进行服务。

 

        在一致性与可用性的选择中,目前CAP最多能够满足两个,一般由于当前的网络硬件肯定会出现延迟丢包等问题,所以坚持分布式,有分区容忍性是必须需要实现的;选择C分区容忍性后,放弃C一致性,或A可用性。


四、Nosql的定位与应用范围

        明确了nosql CAP原理后,再来说明nosql是否属于数据库,就比较清楚了;

衡量是否是数据库的标准:ACID,是指在数据库管理系统DBMS中事务所具有的四个特性;Nosql只具有其中的C和A两个属性,不具有I和D这两个特性,不能属于是传统意义的数据库。

 

        NoSQL不具有事务的全部属性,但在某些方面,还是有其适用的场景。如:对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地

        1. 数据库事务一致性需求 
很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求并不高。允许实现最终一致性。

        2. 数据库的写实时性和读实时性需求
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。

        3. 对复杂的SQL查询,特别是多表关联查询的需求 
任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

 

        由此也可以看出传统的关系型数据库和NoSQL的区别:传统的关系型数据库在功能支持上通常很宽泛,从简单的键值查询,到复杂的多表联合查询再到事务机制的支持。而与之不同的是,NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现)
  传统的SQL数据库的事务通常都是支持ACID的强事务机制。A代表原子性,即在事务中执行多个操作是原子性的,要么事务中的操作全部执行,要么一个都不执行;C代表一致性,即保证进行事务的过程中整个数据加的状态是一致的,不会出现数据花掉的情况;I代表隔离性,即两个事务不会相互影响,覆盖彼此数据等;D表示持久化,即事务一量完成,那么数据应该是被写到安全的,持久化存储的设备上(比如磁盘)。
  NoSQL系统仅提供对行级别的原子性保证,也就是说同时对同一个Key下的数据进行的两个操作,在实际执行的时候是会串行的执行,保证了每一个Key-Value对不会被破坏。

      所以说,NoSQL在一些特定的场景下具有独特的扩展性和性能优势,但由于不具有ACID的属性,不可能在一些关键的事物交易数据库中使用,也不可能完全代替目前关系型数据库的作用和地位,可以作为一个不错的补充软件出现。

0 0
原创粉丝点击