关系型和非关系型数据库的区别?

当前主流的关系型数据库Oracle、DB二、Microsoft SQL Server、Microsoft Access、MySQL等。mysql

非关系型数据库有 NoSql、Cloudant。sql

nosql和关系型数据库比较?
优势:
1)成本:nosql数据库简单易部署,基本都是开源软件,不须要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,天然查询速度远不及nosql数据库。
3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,因此能够存储基础类型以及对象或者是集合等各类格式,而数据库则只支持基础类型。
4)扩展性:关系型数据库有相似join这样的多表查询机制的限制致使扩展很艰难。
缺点:
1)维护的工具和资料有限,由于nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2)不提供对sql的支持,若是不支持sql这样的工业标准,将产生必定用户的学习和使用成本。
数据库

3)不提供关系型数据库对事物的处理。数组

 

 

非关系型数据库的优点:1. 性能NOSQL是基于键值对的,能够想象成表中的主键和值的对应关系,并且不须要通过SQL层的解析,因此性能很是高。2. 可扩展性一样也是由于基于键值对,数据之间没有耦合性,因此很是容易水平扩展。缓存

关系型数据库的优点:1. 复杂查询能够用SQL语句方便的在一个表以及多个表之间作很是复杂的数据查询。2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优点就是本身的弱势,反之亦然。安全

 

 

 

 

 

关系型数据库把全部的数据都经过行和列的二元表现形式表示出来。服务器

 

关系型数据库的优点:oracle

1. 保持数据的一致性(事务处理)nosql

2.因为以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)memcached

3. 能够进行Join等复杂查询

其中可以保持数据的一致性是关系型数据库的最大优点。

 

关系型数据库的不足:

不擅长的处理

1. 大量数据的写入处理

2. 为有数据更新的表作索引或表结构(schema)变动

3. 字段不固定时应用

4. 对简单查询须要快速返回结果的处理

--大量数据的写入处理

读写集中在一个数据库上让数据库不堪重负,大部分网站已使用主从复制技术实现读写分离,以提升读写性能和读库的可扩展性。

因此在进行大量数据操做时,会使用数据库主从模式。数据的写入由主数据库负责,数据的读入由从数据库负责,能够比较简单地经过增长从数据库来实现规模化,可是数据的写入却彻底没有简单的方法来解决规模化问题。

第一,要想将数据的写入规模化,能够考虑把主数据库从一台增长到两台,做为互相关联复制的二元主数据库使用,确实这样能够把每台主数据库的负荷减小一半,可是更新处理会发生冲突,可能会形成数据的不一致,为了不这样的问题,须要把对每一个表的请求分别分配给合适的主数据库来处理。

第二,能够考虑把数据库分割开来,分别放在不一样的数据库服务器上,好比将不一样的表放在不一样的数据库服务器上,数据库分割能够减小每台数据库服务器上的数据量,以便减小硬盘IO的输入、输出处理,实现内存上的高速处理。可是因为分别存储字不一样服务器上的表之间没法进行Join处理,数据库分割的时候就须要预先考虑这些问题,数据库分割以后,若是必定要进行Join处理,就必需要在程序中进行关联,这是很是困难的。

 

 

--为有数据更新的表作索引或表结构变动

在使用关系型数据库时,为了加快查询速度须要建立索引,为了增长必要的字段就必定要改变表结构,为了进行这些处理,须要对表进行共享锁定,这期间数据变动、更新、插入、删除等都是没法进行的。若是须要进行一些耗时操做,例如为数据量比较大的表建立索引或是变动其表结构,就须要特别注意,长时间内数据可能没法进行更新。

 

--字段不固定时的应用

若是字段不固定,利用关系型数据库也是比较困难的,有人会说,须要的时候加个字段就能够了,这样的方法也不是不能够,但在实际运用中每次都进行反复的表结构变动是很是痛苦的。你也能够预先设定大量的预备字段,但这样的话,时间一长很容易弄不清除字段和数据的对应状态,即哪一个字段保存有哪些数据。

--对简单查询须要快速返回结果的处理  (这里的“简单”指的是没有复杂的查询条件)

这一点称不上是缺点,但无论怎样,关系型数据库并不擅长对简单的查询快速返回结果,由于关系型数据库是使用专门的sql语言进行数据读取的,它须要对sql与越南进行解析,同时还有对表的锁定和解锁等这样的额外开销,这里并非说关系型数据库的速度太慢,而只是想告诉你们若但愿对简单查询进行高速处理,则没有必要非使用关系型数据库不可。

---------------------------

NoSQL数据库

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

优势:

 易于数据的分散

各个数据之间存在关联是关系型数据库得名的主要缘由,为了进行join处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散,这也是关系型数据库并不擅长大数据量的写入处理的缘由。相反NoSQL数据库本来就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减小了每一个服务器上的数据量,即便要处理大量数据的写入,也变得更加容易,数据的读入操做固然也一样容易。

 

典型的NoSQL数据库

临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)

1、 键值存储

它的数据是以键值的形式存储的,虽然它的速度很是快,但基本上只能经过键的彻底一致查询获取数据,根据数据的保存方式能够分为临时性、永久性和二者兼具 三种。

(1)临时性

      所谓临时性就是数据有可能丢失,memcached把全部数据都保存在内存中,这样保存和读取的速度很是快,可是当memcached中止时,数据就不存在了。因为数据保存在内存中,因此没法操做超出内存容量的数据,旧数据会丢失。总结来讲:

      。在内存中保存数据

      。能够进行很是快速的保存和读取处理

      。数据有可能丢失

 (2)永久性

       所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,因为必然要发生对硬盘的IO操做,因此性能上仍是有差距的,但数据不会丢失是它最大的优点。总结来讲:

       。在硬盘上保存数据

       。能够进行很是快速的保存和读取处理(但没法与memcached相比)

       。数据不会丢失

(3) 二者兼备

       Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在知足特定条件(默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变动)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又能够经过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。总结来讲:

       。同时在内存和硬盘上保存数据

       。能够进行很是快速的保存和读取处理

       。保存在硬盘上的数据不会消失(能够恢复)

       。适合于处理数组类型的数据

     

2、面向文档的数据库

   MongoDB、CouchDB属于这种类型,它们属于NoSQL数据库,但与键值存储相异。

   (1)不定义表结构

     即便不定义表结构,也能够像定义了表结构同样使用,还省去了变动表结构的麻烦。

   (2)可使用复杂的查询条件 

     跟键值存储不一样的是,面向文档的数据库能够经过复杂的查询条件来获取数据,虽然不具有事务处理和Join这些关系型数据库所具备的处理能力,但初次之外的其余处理基本上都能实现。

3、 面向列的数据库

   Cassandra、HBae、HyperTable属于这种类型,因为近年来数据量出现爆发性增加,这种类型的NoSQL数据库尤为引入注目。

   普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,好比特定条件数据的获取。所以,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

面向列的数据库具备搞扩展性,即便数据增长也不会下降相应的处理速度(特别是写入速度),因此它主要应用于须要处理大量数据的状况。另外,把它做为批处理程序的存储器来对大量数据进行更新也是很是有用的。但因为面向列的数据库跟现行数据库存储的思惟方式有很大不一样,故应用起来十分困难。

 

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

相关文章
相关标签/搜索