简介

关系型数据库管理系统(RDBMS)是建立在关系模型基础上的数据库,主要代表有:Microsoft SQL Server,Oracle,MySQL(开源)。

非关系型数据库(NoSQL),主要代表有:MongoDB,Redis。

ACID vs BASE

ACID BASE
原子性(Atomicity) 基本可用(Basically Available)
一致性(Consistency) 软状态/柔性事务(Soft state)
隔离性(Isolation) 最终一致性 (Eventual consistency)
持久性 (Durable)  

ACID

ACID是关系型数据库强一致性(Strong consistency)的四个要求。

(1) 原子性(Atomicity):事务里的所有操作要么全都执行完成,要么全都不执行。只要有一个操作失败,整个事务就失败,事务会回滚至它们最初的状态。

(2) 一致性(Consistency):数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

(3) 隔离性(Isolation):事务的执行不被其他事务干扰。如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

(4) 持久性(Durable):一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现系统故障也不会丢失。

(注:事务(Transaction)是用户定义的一个操作序列。)

BASE

BASE是基于CAP理论逐步演化而来的,核心思想是即便不能达到强一致性,但是可以根据应用的特点采用适当的方式来达到最终一致性(Eventual consistency)

(1) 基本可用(Basically Available):分布式系统在出现故障的时候,允许损失部分可用性,即保证核心功能或者当前最重要功能可用。

(2) 软状态/柔性事务(Soft-state):状态可以有一段时间的不同步。

(3) 最终一致性(Eventual consistency):当所有服务逻辑执行完成后,系统最后将回到一个一致的状态。

ACID和BASE并没有一个严格的界限,它们取决与组织和系统决定在哪里和如何架构这个系统的场景。它们可能允许在某些关键领域采取严格的ACID事务,其他领域标准稍微放松一些。

区别

1. 事务控制模型不同

RDBMS采用ACID模型,而很多NoSQL系统基本采用BASE模型。虽然有些NoSQL系统支持ACID,但只适用于单个条目。NoSQL不采用ACID的主要原因是其可扩展性方面的限制,如果文档横跨几个服务器,事务控制将会很难实施。

总的来说,RDBMS关注一致性,而NoSQL系统则关注可用性。BASE系统显著的特点是要保证在短时间内,即使有不同步的风险,也要允许新数据能够被存储。BASE系统倾向于简单和迅速,因为它们不必编写处理锁定和释放资源的代码,它们的任务是保证流程运转并稍后处理出错的部分。

2. 数据结构不同

第一,关系型数据库通常是以表格形式(行列)存储数据,而NoSQL系统有多种存储方式,包括列存储(Cassandra)、key/value存储(Redis)、文档存储(MongoDB)以及图存储(Neo4j)等。

第二,若要在关系型数据库中存储数据,必须先定义好模式(schemas),也就是用一种预定义的结构向数据库说明:要有哪些表格,表中有哪些列,每一列都存放何种类型的数据。相比之下,NoSQL数据库的数据存储就比较随意了。键值数据库可以把任何数据存放在一个”键”的名下。文档数据库实际上也如此,它对所存储的文档结构没有限制。

3. 可扩展性不同

第一,在关系型数据库里,增删字段是一件非常麻烦的事情。比如如果想删除某列,如果此列和其他数据关联,那么就无法轻易删除。NoSQL因为数据之间无关系,因此非常容易扩展。一旦发现了新东西,只要把它们加入数据库中就好。

第二,从架构的层面上讲,RDBMS是垂直扩展,当RDBMS数据库负载增加时,需要用更大更好的服务器来扩展数据库(因为RDBMS需要支持join,union等操作,一般不支持分布式集群)。而NoSQL数据库是横向扩展,可以自动对数据进行分片,并将分片存储在分布式系统(distributed system)上,这样,就可以通过增加更多的服务器来进行扩展。

4. 数据读写速度不同

当关系型数据库的数据量达到一定规模时,由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等并发问题,导致其读写速度下滑非常严重。而NoSQL数据库得益于它的数据库结构非常简单,且具有良好的集成缓存能力,读写性能非常好。

5. 成熟度不同

关系型数据库使用SQL语言,各种数据库之间的区别非常小。而NoSQL数据库没有统一的标准,其产品包括各种不同存储类型的数据库。

6. 成本不同

第一,关系型数据库软件价格昂贵,而NoSQL数据库基本都是开源软件,不需要花费大量成本购买使用,相比关系型数据库价格便宜。

第二,由于ACID模型非常复杂,维持高端的RDBMS系统是很昂贵的,需要训练有素的人管理数据库。而NoSQL数据库部署简单,通常使用廉价的服务器,管理也较少。

以下再摘录一份MongoDB官网上的资料:https://www.mongodb.com/nosql-explained

NoSQL vs. SQL Summary

 

SQL Databases

NoSQL Databases

Types

One type (SQL database) with minor variations

Many different types including key-value stores, document databases, wide-column stores, and graph databases

Development History

Developed in 1970s to deal with first wave of data storage applications

Developed in late 2000s to deal with limitations of SQL databases, especially scalability, multi-structured data, geo-distribution and agile development sprints

Examples

MySQL, Postgres, Microsoft SQL Server, Oracle Database

MongoDB, Cassandra, HBase, Neo4j

Data Storage Model

Individual records (e.g., 'employees') are stored as rows in tables, with each column storing a specific piece of data about that record (e.g., 'manager,' 'date hired,' etc.), much like a spreadsheet. Related data is stored in separate tables, and then joined together when more complex queries are executed. For example, 'offices' might be stored in one table, and 'employees' in another. When a user wants to find the work address of an employee, the database engine joins the 'employee' and 'office' tables together to get all the information necessary.

Varies based on database type. For example, key-value stores function similarly to SQL databases, but have only two columns ('key' and 'value'), with more complex information sometimes stored as BLOBs within the 'value' columns. Document databases do away with the table-and-row model altogether, storing all relevant data together in single 'document' in JSON, XML, or another format, which can nest values hierarchically.

Schemas

Structure and data types are fixed in advance. To store information about a new data item, the entire database must be altered, during which time the database must be taken offline.

Typically dynamic, with some enforcing data validation rules. Applications can add new fields on the fly, and unlike SQL table rows, dissimilar data can be stored together as necessary. For some databases (e.g., wide-column stores), it is somewhat more challenging to add new fields dynamically.

Scaling

Vertically, meaning a single server must be made increasingly powerful in order to deal with increased demand. It is possible to spread SQL databases over many servers, but significant additional engineering is generally required, and core relational features such as JOINs, referential integrity and transactions are typically lost.

Horizontally, meaning that to add capacity, a database administrator can simply add more commodity servers or cloud instances. The database automatically spreads data across servers as necessary.

Development Model

Mix of open-source (e.g., Postgres, MySQL) and closed source (e.g., Oracle Database)

Open-source

Supports multi-record ACID transactions

Yes

Mostly no. MongoDB 4.0 and beyond support multi-document ACID transactions. Learn more

Data Manipulation

Specific language using Select, Insert, and Update statements, e.g. SELECT fields FROM table WHERE…

Through object-oriented APIs

Consistency

Can be configured for strong consistency

Depends on product. Some provide strong consistency (e.g., MongoDB, with tunable consistency for reads) whereas others offer eventual consistency (e.g., Cassandra).

结论

传统的关系型数据库具有不错的性能,稳定性好,久经历史考验,积累了大量的成功案例。而NoSQL数据库的出现,则弥补了关系型数据库在某些方面的不足,能极大地节省开发成本和维护成本。
两者都有各自的特点和应用场景,将由你的应用业务需求决定适合使用传统的RDBMS还是NoSQL系统。
对于金融业,可用性和性能都不是最重要的,而一致性是最重要的,用户可以容忍系统故障而停止服务,但绝不能容忍帐户上的钱无故减少(当然,无故增加是可以的),此外,金融业还要求所有报表必须始终保持一致性和可信性,因此RDBMS ACID系统是理想的选择。
而对于购物网站,可用性是最重要的,如果用户生成订单,不管什么情况,我们都不希望此信息受到阻塞。此外,用户的个人信息,社交网络,地理位置等用户生成的数据呈几何倍增长,如果要对这些用户数据进行挖掘,那SQL数据库已经不适合了, NoSQL数据库却能很好地处理这些大数据。

当然也可以把关系型数据库和NoSQL结合起来使用,各取所长,需要使用关系特性的时候就使用关系型数据库,需要使用NoSQL特性的时候我们使用NoSQL数据库。比如用户评论的存储,评论大概有主键id、评论的对象aid、评论内容content、用户uid等字段。我们能确定的是评论内容content肯定不会在数据库中用where content="..."查询,评论内容也是一个大文本字段,那么我们可以把主键id、评论对象aid、用户uid存储在关系型数据库,评论内容存储在NoSQL,这样关系型数据库就节省了存储content占用的磁盘空间,从而节省大量IO。
此外,还可以把NoSQL作为缓存服务器,把热点数据进行内存cache,非热点数据存储到磁盘以节省内存占用。

转载于:https://www.cnblogs.com/HuZihu/p/10233242.html

关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别相关推荐

  1. 关系型数据库的演变以及非关系型数据库

    关系型数据库的演变以及非关系型数据库 文章目录 关系型数据库的演变以及非关系型数据库 数据库分类 什么是关系型数据库 关系型数据库 MySQL数据库的模式的发展 mysql的单机时代 Memcache ...

  2. excel报表管理系统mysql_教育扶贫数据库管理系统下载安装|教育扶贫数据库管理系统(mysql收集excel表格)官方版下载_v1.0_9号软件下载...

    教育扶贫数据库管理系统是一款可以帮助用户建立扶贫数据库的软件,主要的功能就是帮助用户记录扶贫对象档案,可帮助你减少重复工作.提高工作效率. 软件介绍 本软件主要应用于频繁的EXCEL表格收集工作,减少 ...

  3. 数据库事务、存储过程、函数以及触发器之间的区别和联系

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  4. dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  5. mysql是一个大型数据库_MySQL是一个大型关系型数据库管理系统(RDBMS)。

    大型汞进入人体后使人易怒是因为汞进入了( ). 关系管理孔子的"五德"指的是(). "其心三月不违仁",型数系统孔子说的是哪位学生?() 三人行必有我师焉,据库 ...

  6. 数据库管理系统(基于前端+后端+数据库)

      库存管理系统 包括模块: (1)基本信息管理. (2)商品入库管理. (3)商品出库管理. (4)商品查询管理. (5)查看商品目录. 实训步骤: 开发环境:html , css , js , p ...

  7. JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系...

    一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...

  8. 了解数据库的作用、特点及关系型数据库管理系统

    学习目标 能够知道数据库的作用数据库和数据库管理系统的关系 一.数据库 1. 数据库的介绍 数据库就是存储和管理数据的仓库,数据按照一定的格式进行存储,用户可以对数据库中的数据进行增加.修改.删除.查 ...

  9. 关系型数据库MySql与非关系型数据库NoSql

    云计算背后的秘密:NoSQL诞生的原因和优缺点 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL有了非常深入的研究,但是在最近准备YunTable的Chart的时候,发现NoSQL不 ...

  10. 简述关系型数据库和非关系型数据库

    当前数据库分为关系型数据库和非关系型数据库 关系型数据库 关系型数据库:指采用了关系模型来组织数据的数据库. 关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据 ...

最新文章

  1. opencv中的Rodrigues()函数
  2. lambda表达式_在Java 7或更早版本中使用Java 8 Lambda表达式
  3. [转]C++中的三种继承public,protected,private
  4. 微信企业号开发:启用回调模式
  5. mysql 导致iis 假死_解决IIS无响应假死状态
  6. Skype for Business Server 2019 本地部署
  7. 使用.Net中的WeakDictionary — ConditionalWeakTable
  8. Android 8.0学习 (2)---Android HAL
  9. Selenium爬虫 -- Pyhton进阶:使用cookie登陆某网站
  10. Firefox火狐浏览器怎么设置中文 火狐浏览器语言设置方法
  11. LintCode 最长公共子串
  12. 基于ENVI的Landsat 7地表温度(LST)大气校正方法反演与地物温度分析
  13. ClickHouse压缩率
  14. 在CentOS8.4中安装OpenFOAM
  15. ORACLE对表批处理操作
  16. 大厂经典面试系列之三:唯品会大数据开发面试【建议关注收藏订阅,你早晚会用上】掌握了这些面试题,余生不在怕面试
  17. linux驱动21:内核创建类class_create
  18. 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
  19. 支付宝常用接口统一封装,可直接支付参数使用(适用于H5、PC、APP)
  20. 计算机软件实习实验二

热门文章

  1. 图论算法——Prim算法和Kruskal算法
  2. 大数据:技术与应用实践指南(中国工程院院士倪光南倾情作序,雷万云、毛新生、段永朝、安晖联合力荐)
  3. PyTorch:数据读取1 - Datasets及数据集划分
  4. 海量数据挖掘MMDS week5: 聚类clustering
  5. Git版本控制:Git分支处理
  6. excel几个数相加等于某个数_Excel如何在一列数字中找出几个之和等于某个特定值...
  7. python 表白程序代码_程序员python表白代码
  8. msp430和stm32 dht11驱动程序
  9. 力扣-72 编辑距离
  10. 二叉树的遍历-C++