关系型数据库与非关系型数据库的区别

前言

关系型数据库

关系型数据库是指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型,数据按照表的形式存储,然后多组表构成了一个数据库。

优点

存储方式:采用表格的储存方式,数据以行和列的方式进行存储,要读取和查询都十分方便,并且容易理解;
存储结构:按照结构化的方法存储数据,每个数据表都必须先对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据。这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高;
事务性:强调ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作,而且可以充分满足数据库操作的高性能和操作稳定性的要求。因为关系型数据库十分强调数据的强一致性,所以其对于事务的操作有很好的支持。并且关系型数据库可以控制事务原子性细粒度,一旦操作有误或者有需要,可以马上回滚事务。
查询方式:使用结构化查询语言(SQL)对数据库进行查询,SQL能够支持数据库的CRUD(增删查改)的操作,具有非常强大的功能;

缺点

难于修改表格。因为关系型数据库在存储数据前,需要先对各个字段定义好,而在存入数据后,如果需要修改数据表的结构就会十分困难,所以在对数据库系统进行升级和扩展时,往往需要停机维护和数据迁移;
难于扩展:由于关系型数据库将数据存储在数据表中,所以当数据表越多时,越难于进行数据操作。如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力;
难于管理:主要是针对多张关联数据表的情况。如果需要操作的数据涉及到多张数据表,数据表之间又会存在着复杂的关系,所以随着数据表数量的增加,数据管理会越来越复杂,这会降低数据库的性能;
难于处理高并发事务:当用户并发性非常高的时候,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈;除此之外,在一张包含海量数据的表中查询,效率是非常低的。

常见的关系型数据库

Oracle,MySQL

关系型数据库

非关系型数据库是指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。所以,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

优点

易扩展:NoSQL的数据之间无关系,这样就非常容易扩展。这可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载;
数据存储模式灵活:无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。这使得它非常适用于SNS(Social Networking Services)中,例如facebook,微博这些需要经常进行更新与用户数据更新的系统。

缺点

只适合存储一些较为简单的数据,较难查询复杂的数据;
不适合持久存储海量数据。

常见的非关系型数据库

MongoDB:是最著名的NoSQL数据库。它是一个面向文档的开源数据库。MongoDB是一个可伸缩和可访问的数据库。它在c++中。MongoDB同样可以用作文件系统。在MongoDB中,JavaScript可以作为查询语言使用。通过使用sharding MongoDB水平伸缩。它在流行的JavaScript框架中非常有用。
Redis:是一个键值存储。此外,它是最著名的键值存储。Redis支持一些c++、PHP、Ruby、Python、Perl、Scala等等。Redis是用C语言编写的。此外,它是根据BSD授权的。
HBase:是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。

区别

数据存储方式不同:关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据;与其相反,非关系型数据通常存储在数据集中,就像文档、键值对或者图结构;
数据模式不同:在sql中,必须先定义好表结构,才能够添加数据,例如定义表的主键、索引、外键等。表结构可以在定义之后更新,但是如果有比较大的结构变更,就会变的比较复杂;在Nosql数据库中,数据可以在任何时候任何地方添加,不需要预先定义;
扩展方式不同:要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了,但这种方式最终肯定会达到纵向扩展的上限;而NoSQL数据库是横向扩展的,其扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载;
对事务性的支持不同:SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务;在Nosql中没有事务这个概念,每一个数据集都是原子级别的;
查询速度不同:关系型数据库将数据存储在硬盘中,查询速度较慢;Nosql数据库将数据存储于缓存之中,而且不需要经过SQL层的解析,查询速度快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值