关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别
简介
关系型数据库管理系统(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). |
结论
关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别的更多相关文章
- 安卓项目集成objectbox-java数据库框架教程(非关系型)
objectbox数据库是greenrobot团队开发的全新非关系型数据库框架,该团队还开发过greenDao,EventBus等热门框架,objectbox可能是第一次听说,但是greenDao,E ...
- JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...
- 非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解
前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了.那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面 ...
- 非关系型数据库(NoSql)
最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...
- python 之操作redis数据库(非关系型数据库,k-v)
数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...
- Redis非关系型缓存数据库集群部署、参数、命令工具
<关系型数据库与非关系型数据库> 关系数据库:mysql.oracle.DB2.SQL Server非关系数据库:Redis(缓存数据库).MongodDB(处理海量数据).Memcach ...
- 【Redis】(1)-- 关系型数据库与非关系型数据库
关系型数据库与非关系型数据库 2019-07-02 16:34:48 by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...
- 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)
数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...
- 各NoSQL数据库管理系统与模型比较
提供:ZStack云计算 内容简介 NoSQL数据库的存在意义在于提供传统关系数据库管理系统所不具备的特定功能.无论是负责承载简单的键-值对存储以实现短期缓存,抑或是处理传统数据库及结构化查询语言(简 ...
- 《Linux就该这么学》培训笔记_ch18_使用MariaDB数据库管理系统
<Linux就该这么学>培训笔记_ch18_使用MariaDB数据库管理系统 文章最后会post上书本的笔记照片. 文章主要内容: 初始化MariaDB服务 管理用户以及授权 创建数据库与 ...
随机推荐
- python 文件和目录操作题库
1. 把一个目录下所有的文件删除,在所有的目录下新建一个a.txt的文件,并在文件下写入"python"关键字. 解题思路: 1.如果目录存在则切换进入目录 ...
- Sql学习笔记(二)—— 条件查询
上篇简单介绍了一下sql的一些基础增删改查语句,而针对多种多样的查询语句则未详细说明,这一篇继续记录一下关于各种条件查询的知识. 1.按列名进行查询 语句: select stuName , stuA ...
- C++系列总结——继承
前言 前面讲了封装,但封装只是隐藏了类内部实现.如果使用多态隐藏类本身的话,只有封装是不够的,还需要继承. 继承 通过封装.我们把一些相关的函数和变量包裹在了一起,这些函数和变量就叫做类的成员函数和成 ...
- 06 入门 - Web服务器
目录索引:<ASP.NET MVC 5 高级编程>学习笔记 开发和调试ASP.NET MVC程序,需要Web服务器的支持. Visual Studio 2012+开发环境提供了两种Web服 ...
- flex 输入框布局
1:创建一个弹性容器(display:flex) 2:构建2个或3个弹性项目. 3:把弹性项目设置为居中对齐.(align-items:center) 4:改变input自身对齐方式,把它设置为拉伸以 ...
- 微信分享大图遇到的问题(Android)
起因: 要做一个微信图片分享的功能,但是对于大图会如下问题: 当时没有仔细查看错误日志,单纯的以为是图片太大的问题. 分享图片代码: public void WXsharePic(String tra ...
- 阿里云服务器部署Java Web项目全过程
最近需要将一个Java Web项目部署到服务器上,方便多人共享访问.这也是我第一次接触服务器之类的东西,也花了一点时间,最终总算部署成功,写下一篇文章记录以便日后回顾. 购买服务器 第一步当然是需要购 ...
- Spring Boot使用Maven打包替换资源文件占位符
在Spring Boot开发中,通过Maven构建项目依赖是一件比较舒心的事,可以为我们省去处理冲突等大部分问题,将更多的精力用于业务功能上.近期在项目中,由于项目集成了其他外部系统资源文件,需要根据 ...
- Linq语法常见普通语法
闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些linq新手,如果有其它疑问,可以进右上角群,进行交流探讨,谢谢. 开门见山 读这篇文章之前,我先说下,每一种搜索 ...
- windows本地远程虚拟机docker中的数据的问题
关闭各种防火墙 打开宿主机(windows)的cmd,在其中添加通往192.168.1.0/24网络的路由. 通往192.168.1.0/24网络的数据包由172.20.1.12来转发 route a ...