关系型数据库和非关系型数据库有什么区别?

池璐


先说说关系型数据库和非关系型数据库有什么区别

这里的关系型和非关系型,主要是数据存储格式的区别,我们常见的关系型数据库有Mysql、Oracle、DB2、SQL Server等,都是通过关系模型来组织数据,也就是二维表格模型。

而非关系型数据库,就不是按照这个二维表格来存储数据了,例如Redis是使用键值对(key-value)来组织数据,MongoDB是采用BSON的格式(可以想象成JSON);并且不局限于固定的结构。

关系型数据库和非关系型数据库之间的关系,也不是有你没有,二者选其一,通常都是配合起来使用的。

各自的优缺点

  • 关系型数据库,容易理解,使用方便(通过SQL语言操作),易于维护;但是因为数据在磁盘上存储,I/O会成为一个很大的瓶颈,如果在高并发的场景下,性能降低的很快;另外,对于关系型数据库,当单表数据量增加到一定程度的时候,表的操作效率也会很低;表结构固定,当数据量比较大的时候,对表结构的扩展会是灾难性的。

  • 非惯性数据库因为数据结构的“随性”,用户可以根据需要增加字段,关系型数据习惯设计成多张表,然后通过表关联查询,而非关系型数据库(文档性)会把所有字段放到一个集合中,避免多表的关联。不过缺点也非常明显,“随性”也就意味着没有标准,单集合有好处也有坏处,没有完整性约束,对于复杂的业务场景支持比较差。

至于MongoDB和Redis怎么选择,两者差别还是很大的,适用场景也不同

  • Redis的数据存储格式是key-value,支持持久化、 支持事务,经常用于缓存、高并发下的读写(计数器、最新列表、秒杀),因为单线程的机制也会用于分布式锁。

  • MongoDB的数据存储格式为BSON(类似于JSON),支持快速读写,特别是大吞吐量的写操作;如果表结构不明确,未来可能会发生很大的变化,非常适合使用MongoDB。

  • 架构中可以同时包含关系型数据库、Redis和MongoDB,各司其职。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


相信不少人在工作中都遇到过以下对话:

程序员A:又要到流量高峰期了,感觉数据库要崩。

程序员B:嗯嗯,赶紧扩容吧。

虽然数据库很耳熟,但是它究竟是何方神圣呢?今天就给大家科普一下。

数据库,其实就是互联网业务存储、查询数据的仓库。通过几十年的发展历史让数据库衍生出了各种不同的类型。

1、关系型数据库

关系型数据库,是指采用了关系模型来组织数据的数据库。例如,某个学生的信息——姓名:张三,性别:男,学号:12345,班级:二年级一班,每一个信息之间是有联系的,而数据也是以表格形式存储的。

这就是最早的数据库形态,1970年IBM的研究员E.F.Codd博士首先提出关系模型,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。Oracle、DB2、Microsoft SQL Server、MySQL等都属于这一范畴。

但是,这类数据库的特点是一致性强,缺点是读写性能差。

2、非关系型数据库(NoSQL)

顾名思义,非关系型数据库是相对关系型数据库的一个概念,起初指的是“没有SQL”的数据库,但现在已经公认为“no relational”(非关系型)。非关系型数据库是根据特定的应用场景设计出来的,没有明确的分类标准,但根据应用场景大致可分为几类:1、文档数据库,没研究过定义,通常mongodb 就是文档数据库,特点就是数据定义比较灵活。2、Kv数据库,提供的是kv的数据表示模式。单机的rocksdb,分布式的tikv之类。3、图数据库。数据可以用图来定义。4、列式数据库。hbase之类,这里可能有争议,很多人把hbase 定义为列存。

非关系型数据库的代表是MongoDB、Redis以及Hbase,其特点与关系型数据库相反。


3、云原生数据库

之前提到的数据库都属于传统数据库和开源数据库,但到了云计算时代,无论是云服务提供商还是用户,都需要一个完全为云打造的数据库,于是诞生了全新的产品形态——云原生数据库。

作为云计算领域的先行者,亚马逊在2014年11月召开的AWS re:Invent 年度大会上,发布了云原生数据库Aurora, 让数据库行业发生了翻天覆地的变化。

在亚马逊之后,许多云厂商也纷纷投入云原生数据库研究。比如2017年9月,阿里云在国内率先发布自研的云原生数据库POLARDB,它采用了自主研发分布式存储引擎,计算服务器和存储数据分离的架构。

如今,国际社会公认,与传统商业数据库相比,云原生数据库拥有以下几个大优势,是未来的大势所趋。


1)价格更低

传统商业数据库按年、按CPU这样的方式进行售卖,对大体量的企业而言,每年需要数百万甚至千万的费用。

云原生数据库按使用量付费,让用户可以以非常低的价格就享受到企业级数据库的服务。用户可以根据自己的业务实际发展情况,按需的购买,可以大大降低企业在早期发展过程的成本。

此外,云原生数据库天然是规模化的,规模化会带来成本的下降。这也大大降低单个用户的成本。例如,阿里云PolarDB价格仅为商业数据库的1/10。

2)更强的性能

用户使用传统的数据库需要单独购买硬件,然而传统的数据库厂商则更倾向于去适配通用的硬件,对于一些特定的、前沿的硬件,不会去专门适配,所以传统数据库用户无法享受新硬件的红利。

而云原生数据库的架构可以重复享受硬件变革带来的红利,从而实现更强的性能。

3)更快速的迭代,让数据库更安全稳定

云原生数据库可以做到以周,甚至以天为单位来迭代数据库,这是传统的数据库不可能做到的。当系统出现问题时,云原生数据库可以快速进行升级,而传统数据库升级的周期通常是年,级别是出现了非常严重的漏洞,升级的周期也是以月为单位来计算的。

4)无需关注部署、运维等,全力专注业务开发

现在是一个快速创新的时代,每家企业都希望将重要的资源聚焦在自己的核心业务开发上。使用云原生数据库,让企业不再需要关注数据库的部署与运维,开箱即用,全力专注在自己的业务开发和用户价值上。

对于关系型数据库和非关系型数据库的区别就先介绍这么多,如果还有更多想知道的,欢迎留言提问。觉得云原生数据库不错的,也可以试用一下,也许你会爱上它。


阿里云


相信大家在二级数据库考试的时候都做过这么一道题,关系型数据库中的关系是什么意思?答案是:数据模型符合满足一定条件的二维表格式,即是这张二维表中的行都是一个个元素,而列是一个个的属性,这种结构化的数据通过结构化的查询语言(SQL)可以以不同的方式进行存取!


所以说,SQL的定义和执行就代表着关系型数据库结构的数据存取,从where,groupby,order等命令,sum,count等函数就能一目了然的知道,关系型数据库可以通过字段方便的筛选,分组,统计和运算,并且性能十分高效!

总结来说,关系型数据库不仅维护着一张二维表中行和列的关系,还维护着多张表中一对多,多对多的关系,并能通过SQL处理这种关系进行存取,还提供事务支持!

而非关系型数据库是以key-value形式存储数据,可认为是只有一个主键(key),加一个属性(value)构成的二维表,其value中的属性之间的关系无法体现,很难通过其中的某个属性进行统计,分组等关系型数据库中的常规操作!


非关系型数据库更容易维护与扩展,关系型数据库却因为分表分库等有一定难度!非关系型数据库不支持事务,只能使用别的方式支持数据一致性!

mongodb和redis比较的话,redis更适合用做缓存,消息队列等,而mongodb适用于文档结构(json等)等的大容量数据存取!

关系型数据库和非关系型数据库在不同的场景都大有所为,可根据实际情况择优使用!

非关系型数据库和关系型数据库的区别就说到这,本人持续更新更多的技术分享,敬请关注!


哎哟JAVA不错哦


关系型数据库在关系代数为基础建立起来的一种应用,经过严密的完备性证明。也就是说理论上关系型数据库可用于所有场景。当然这仅仅是理论上的说法,实际上,很多文档和图形数据很难采用统一的结构,而且这些数据通常都是海量的。为了提高这些数据的处理效率,人们针对不同的场景设计了不同的算法,这就是非关系型数据库。值得注意的是非关系型数据库中保留了关系型数据库的特征,是对关系型数据库应用的一种扩展。NoSQL=Not Only SQL,不仅仅是SQL。

关系型数据库概要

只要是每行的列都相同的表格都是关系型数据表。这叫第一范型。每行数据都是唯一的关系表叫第二范型。每行数据唯一且能由特定字段确定的关系表叫第三范式,这些特定的字段被称为主键。通常所说的数据库都满足第三范型,也就是可用主键进行查询。关系型数据库有基本的四则运算可以增减列或增减行:选择,投影,并,交。SQL就是根据这些规则设计出来的。

非关系型数据库

非关系型数据库是根据特定的应用场景设计出来的,没有明确的分类标准,但根据应用场景大致可分为:键值存储,列存储,文档型和图型等几类。题主所说的Redis是键值存储型的,它不关心文档的内容,用哈希表存储了文档的特征属性,方便快速查找文档,多用于文件管理。MongoDb是文档型数据库,管理结构化或者半结构化的格式文档,可对文档内容进行高速地全文检索,也可以建立复杂的文档分类结构,是键值存储的升级版。至于如何选择,主要看需求,不需要检索内容时可使用Redis,轻便易安装。反之,用MongoDb功能强大。

关系型数据库是一种基本的数据库,非关系型数据库是关系型数据库的扩展应用。我个人很讨厌非关系型数据库这个叫法,它容易让人产生误解,以为NoSQL=No SQL。实际上,还有很多使用其他原理的数据库,比如,在人工智能领域用一定应用的逻辑型数据库。这类数据库比较小众鲜为人知,称它们为非关系型数据库比较贴切。


日冲信息 黄


欢迎关注我,一个程序员老司机,和你分享编程、运营、需求等等经验和趣事。

作为一个多年的程序员,两种数据库都使用过现在将自己的一些感受和你分享一下。

最大的区别



两种数据库的最大区别在于存储方式,关系数据库是将关系存储到数据库里面,什么关系呢?就是一对一、一对多和多对多关系,这样存储进去之后就能够通过sql命令查询到符合客观需求的数据,但是将关系存储进行查询时,有时需要关联很多个数据表才能够得到需要的数据,于是就诞生的分关系数据库,也就是nosql数据库。

两种常见的非关系数据库


一种是redis数据库,这种数据库主要做为缓存使用,它一般配合关系数据库一起用,也就是先从关系数据库获取或者计算数据,然后保存到redis数据库里面,而mongodb数据库除了具备redis的特点,也具备关系数据库的特点,所以一般业务数据还是用它来保存。

那为什么不用mongodb来代替redis

因为redis非常小巧和专业,已经将缓存做到了极致。


web互联网


我们首先来说一下关系型和非关系型数据库的区别,然后再说mongodb和redis。

关系型数据库,顾名思义就是说里边存储的数据都是关系,就是数学里说的元组。每个元素都有对应的另一个元素存在。在这种数据库的中,数据是用二维表来表示的,而表之间是可以有关系的,比如员工表和部门表,每个员工都属于某一部门,这种关系在关系型数据库是用外键来表示的,员工表中存了部门的ID,那么在查询的时候就可以通过这种关系,把员工和部门的信息一同查出来,可以使用SQL的join子句。代表性的数据库有MySQL, Oracle和PostgreSQL。

非关系型数据库中数据的表示并不是关系的,有这么几种类型,Document类型,以MongoDB为代表,一种是Key-Value类型的,以Redis为代表,还有一种是BigTable类型的,以cassandra为代表。每种都有不同的优势和功能特性,不过总体上非关系型数据库的出现是为了更好的适应分布式系统架构和提升性能。关系型数据库的Join是非常耗时的一个操作,在大量数据的前提下,性能牺牲的比较多。而非关系型数据库的设计是denormalized,即通过定义重复的数据来消除join,例如员工和部门,员工数据中会包括部门的相关数据,比如名称,负责人等。这样做的代价就是每当部门数据有更新,员工数据也需要做同步的修改,可能会引起数据不一致。所以这两种数据库需要根据业务场景来做选择,是需要高并发,高性能,还是要方便数据的存储,数据是不是最适合用表的形式来存储等等。

再来说MongoDB和Redis。

这两种都是非关系型的数据库,MongoDB是document类型的,它的存储格式是bson,是带有数据类型的json,非常适合给web前端提供数据。MongoDB的数据是存储在硬盘上,所以会受到硬盘速度的制约。而redis是key-value形式存储的,体积小,且数据是存在内存中,极大的提高了性能,所以非常适合做缓存和一些临时数据的存储,如用于验证的token。


乾途技术分享


题主要先明白两种类型,

关系型就常见的oracle,MySQL,等等

非关系缓存中用的多,而且有点像精简版的关系型!

键值对形式或者文档形式存储!

非关系不支持SQL,不支持事务,不过速度快啊,性能好!

至于选择的Redis跟mongdb,要看场景进行选择了!

因为mongdb以文档形式存,最好在开发评论系统的时候使用,存json格式数据最为关键!

若有帮助,右上角,纯手打!个人经验总结!


服务端开发工程师


关系型数据库遵循acid(原子性,一致性,隔离性,持久性),非关系型数据库只要遵循cap(一致性,可用性和分区容忍性),那么这些属性的差异也就决定了性能的快慢和建表的数据结构的类型,其中mongodb和redis都属于nosql,不过mongodb属于文档型数据库,redis属于内存数据库


分享到:


相關文章: