关系型数据库和非关系型数据库比较

来源:互联网 发布:淘宝退款影响店铺吗 编辑:程序博客网 时间:2024/05/22 08:05

关系型数据库,常见的有Oracle、MySQL,DB2、SQL Server,
是指采用了关系模型来组织数据的数据库,也是二维表格(table)模型; 关系型数据库把所有的数据都通过行和列的二元表现形式表示出来。

关系型数据库主要由表(table)的逻辑单元组成,并且这些表在数据库内部彼此关联。这样,数据被分解为较小的,可管理的逻辑单元,更容易管理和维护。表与表之间是通过关键字彼此关联。

非关系型数据库,一般不保证遵循ACID原则的数据存储系统,主要有NoSQL,是not only SQL ;
典型的NoSQL数据库:临时性键值存储(Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase) ;

关系型数据库的优势:
1. 保持数据的一致性(事务处理),安全;
2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)
3. 可以进行Join等复杂查询
其中能够保持数据的一致性是关系型数据库的最大优势。

关系型数据库的不足: 大量数据数据操作速度慢
不擅长的处理
1. 大量数据的写入处理
2. 为有数据更新的表做索引或表结构(schema)变更
3. 字段不固定时应用
4. 对简单查询需要快速返回结果的处理

NoSQL数据库优势
关系型数据库应用广泛,能进行事务处理和表连接等复杂查询。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理, 但它恰恰弥补了之前所列举的关系型数据库的不足之处。

优点:易于数据的分散
各个数据之间存在关联是关系型数据库得名的主要原因,为了进行join处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散, 这也是关系型数据库并不擅长大数据量的写入处理的原因。

相反NoSQL数据库原本就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减少了每个服务器上的数据量,
即使要处理大量数据的写入,也变得更加容易,数据的读入操作当然也同样容易。

缺点:在事务处理不擅长,数据安全性难以保证;

总结:关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库, 让NoSQL数据库对关系型数据库的不足进行弥补。

典型的NoSQL数据库
临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)
一、 键值存储
它的数据是以键值的形式存储的,虽然它的速度非常快,但基本上只能通过键的完全一致查询获取数据,根据数据的保存方式可以分为临时性、永久性和两者兼具 三种。
(1)临时性
所谓临时性就是数据有可能丢失,memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止时,数据就不存在了。由于数据 保存在内存中,所以无法操作超出内存容量的数据,旧数据会丢失。总结来说:
。在内存中保存数据
。可以进行非常快速的保存和读取处理
。数据有可能丢失
(2)永久性
所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的,但数据不会丢失是它最大的优势。总结来说:
。在硬盘上保存数据
。可以进行非常快速的保存和读取处理(但无法与memcached相比)
。数据不会丢失
(3) 两者兼备
Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件(默认是 15分钟一次以上,5分钟内10个以上, 1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。总结来说:
。同时在内存和硬盘上保存数据
。可以进行非常快速的保存和读取处理
。保存在硬盘上的数据不会消失(可以恢复)
。适合于处理数组类型的数据

二、面向文档的数据库
MongoDB、CouchDB属于这种类型,它们属于NoSQL数据库,但与键值存储相异。
(1)不定义表结构
   即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。
(2)可以使用复杂的查询条件
   跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数据库所具有的处理能力,但除此以外的
其他处理基本上都能实现。

三、 面向列的数据库
Cassandra、HBae、HyperTable属于这种类型,由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引入注目。
普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反, 面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

主要参考:
http://blog.csdn.net/qq_22101509/article/details/49794303;
http://blog.csdn.net/longxingzhiwen/article/details/53896702
http://blog.csdn.net/lijinqi1987/article/details/51823506

原创粉丝点击