关系型数据库和非关系型数据库介绍及优劣势比较

原创
2017/09/19 15:49
阅读数 70

关系型数据库和非关系型数据库介绍及优劣势比较

版权声明:本文为yunshuxueyuan原创文章。
如需转载请标明出处: https://my.oschina.net/yunshuxueyuan/blog
QQ技术交流群:299142667

关系型数据库

关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

关系型数据库的优点

容易理解:二维表结构是非常贴近逻辑世界的一个概念

使用方便:通用的SQL语言使得操作关系型数据库非常方便

易于维护:丰富的完整性大大减低了数据冗余和数据不一致的概率

瓶颈

高并发读写需求

网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

海量数据的高效率读写

网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的

高扩展性和可用性

在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。

关系型数据库的相于web应用缺陷

事务一致性

关系型数据库在对事物一致性的维护中有很大的开销,而现在很多web2.0系统对事物的读写一致性都不高,事务的一致性不那么重要。

读写实时性

关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,

对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,而并发读写能力要求极高,关系型数据库无法应付,必须用新的一种数据结构存储来代替关系数据库。

固定的表结构

扩展性极差,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。

复杂SQL,特别是多表关联查询

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

非关系型数据库

用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。

非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。但非关系型数据库由于很少的约束,他也不能够提供像SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。他只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,关系型数据库显的更为合适。

注:数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。

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

关系型数据库的优势:

1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

非关系型数据库的优势:

1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

非关系型数据库分类

除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类:

面向高性能并发读写的key-value数据库:

key-value数据库的主要特点即使具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表

面向海量数据访问的面向文档数据库:

这类数据库的特点是,可以在海量的数据中快速的查询数据,典型代表为MongoDB以及CouchDB

面向可扩展性的分布式数据库:

这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化

Hbase的优点

1.列的可以动态增加,并且列为空就不存储数据,节省存储空间.

2.Hbase自动切分数据,使得数据存储自动具有水平scalability.

3.Hbase可以提供高并发读写操作的支持

4.对海量数据高效存储和访问

5.高可扩展性和高可用性,线性扩展

6.表的格式不是固定的,通过键值对存储,减少时间空间开销

7.随机读写

8当行数小于10000的时候,开销和行数成正比。但是超过50000行时,无论是顺序还是随机的插入操作,性能都会逐渐变好

Hbase的缺点

1 不能支持条件查询,只支持按照Row key来查询.

2 暂时不能支持Master server的故障切换

3 没有表与表之间的关联查询

Redis的优点

1. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。(Redis只会缓存所有的 key的信息)

2. Redis支持数据的备份,即master-slave模式的数据备份。

3. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

4. Redis使用最佳方式是全部数据in-memory。

 

Redis的缺点

1. Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

2. 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。

3. redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。

4. Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

memcached的缺点

1、 数据是保存在内存当中的,一旦服务进程重启,数据会全部丢失

2、 Memcached以root权限运行,而且Memcached本身没有任何权限管理和认证功能,安全性不足

Redis和memcached比较

1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;

2、 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash

3、 虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

4、 过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10;

5、 分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从;

6、 存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);

7、 灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;

8、 Redis支持数据的备份,即master-slave模式的数据备份;

关系型数据库产品比较

sqlserver
优点:

1. 易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等;

2. SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML)的核心支持以及在Internet上和防火墙外进行查询的能力;

缺点:

1. 开放性 :SQL Server 只能windows上运行,稳定对数据库十分重要。Windows9X系列产品偏重于桌面应用,NT server只适合小型企业而且windows平台靠性安全性和伸缩性非常有限。
2. 伸缩性并行性 :SQL server 并行实施和共存模型并成熟难处理日益增多用户数和    数据卷伸缩性有限;
3. 安全性:没有获得任何安全证书。
4. 性能 :SQL Server 多用户时性能佳 ;
5. 客户端支持及应用模式: 客户端支持及应用模式。只支持C/S模式,SQL Server C  /S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接;
6. 使用风险:SQL server 完全重写代码经历了长期测试断延迟许多功能需要时间来证   明并十分兼容;

Oracle
优点:

1. 开放性:Oracle 能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持;
2. 可伸缩性,并行性:Oracle 并行服务器通过使组结点共享同簇工作来扩展windownt能力提供高用性和高伸缩性簇解决方案windowsNT能满足需要用户把数据库移UNIXOracle并行服务器对各种UNIX平台集群机制都有着相当高集成度;
3. 安全性:获得最高认证级别的ISO标准认证。 
4. 性能高 保持开放平台下TPC-D和TPC-C世界记录;
5. 客户端支持及应用模式:Oracle 多层次网络计算支持多种工业标准用ODBC、JDBC、OCI等网络客户连接
6. 使用风险:Oracle 长时间开发经验完全向下兼容得广泛应用地风险低

缺点:

对硬件的要求很高;
价格比较昂贵;
管理维护麻烦一些;
操作比较复杂,需要技术含量较高;

MySql

优点

1. 体积小、速度快、总体拥有成本低,开源

2. 支持多种操作系统

3. 是开源数据库,提供的接口支持多种语言连接操作

4. MySql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySql能很容易充分利用CPU

5. MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证

6. 支持ODBC for Windows, 支持所有的ODBC 2.5函数和其他许多函数, 可以用Access连接MySql服务器, 使得应用被扩展

7. 支持大型的数据库, 可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改

8. 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性

9. MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上

缺点:

1. 不支持热备份;

2. MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调mysqladmi

来重读用户权限时才发生改变;
3. 没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;

 

版权声明:本文为yunshuxueyuan原创文章。
如需转载请标明出处: https://my.oschina.net/yunshuxueyuan/blog
QQ技术交流群:299142667

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部