关系型数据库和非关系型数据库概述与优缺点对比

目录
  • 一、关系型数据库
    • 1、概念
    • 2、关系型数据库的特点
    • 3、关系型数据库的瓶颈
    • 4、关系型数据遵循ACID原则
      • 1、A(Atomicity)原子性
      • 2、C(Consistency)一致性
      • 3、I(Isolation)独立性
      • 4、D(Durability)持久性
  • 二、NoSQL数据库
    • 1、分布式系统
    • 2、分布式计算的优点
    • 3、分布式计算的缺点
    • 4、关系型数据库和非关系型数据库的比较
      • 4.1、关系型数据库
      • 4.2、NoSQL
    • 5、NoSQL的优点/缺点

一、关系型数据库

1、概念

关系型数据库:是指采用了关系模型来组织数据的数据库,是目前各类数据库中使用最为广泛的数据库系统。简单的说,关系模型指的就是二维表格模型,一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。现在使用的主流数据库都是关系型数据库,比如SQL Server、Mysql、Oracle、DB2、Sybase等。
关系模型中常用的概念:
关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。
元组:可以理解为二维表中的一行,在数据库中经常被称为记录。
属性:可以理解为二维表中的一列,在数据库中经常被称为字段。
域:  属性的取值范围,也就是数据库中某一列的取值限制。
关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成。
关系模式:指对关系的描述。其格式为:关系名(属性1、属性2......属性N),在数据库中称为表结构。

2、关系型数据库的特点

关系数据库是支持关系模型的数据库系统。而关系模型是由二维表来表示实体和实体间联系的模型。使用二维表存储数据,对使用者来说很直观,更容易理解。使用关系数据库的优势主要表现在以下几个特性:
(1)操作方便性。通过开发应用程序和数据库连接,用户能方便的对数据库中数据进行操作,特别对没有数据库基础的人,也可以通过数据库管理系统,直接在数据库中操作。
(2)易于维护性。关系数据库在完整性约束中提供了实体完整性、参照完整性和用户定义的完整性,通过完整性约束可以大大降低数据存储的冗余及数据不一致的概率。
(3)访问数据的灵活性。关系数据库中提供了诸如视图、存储过程、触发器、索引等对象,使数据的访问更加灵活。

3、关系型数据库的瓶颈

(1)对数据库高并发读写的需求
Web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,无法使用动态页面静态化技术,因此数据库的并发负载非常高,往往要达到每秒上万次的读写请求,此时,服务器上的磁盘根本无法承受如此之多的读写请求。
(2)对海量数据的高效率存储和访问的需求
对于大型的社交网站,每天用户产生海量的用户动态,随着用户的不断增减,一个数据表中的记录可能有几亿条,对于关系型数据库来说,在一个有上亿条记录的表里面进行SQL查询,效率是及其低下的。
(3)高扩展性和可用性
在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像web server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。

4、关系型数据遵循ACID原则

事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

1、A (Atomicity) 原子性

原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

2、C (Consistency) 一致性

一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。

3、I (Isolation) 独立性

所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

4、D (Durability) 持久性

持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

二、NoSQL数据库

NoSQL是用于指代那些非关系型的、分布式的、且一般不保证遵循ACID原则的非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。非关系型数据库提出了另外一种概念,例如:以键值对的方式进行存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段。但非关系型数据库由于很少的约束,他也不能够提供像SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。它只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL数据库显的更为合适。

1、分布式系统

分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。

分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。

因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。

2、分布式计算的优点

可靠性(容错) :

分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。

可扩展性:

在分布式计算系统可以根据需要增加更多的机器。

资源共享:

共享数据是必不可少的应用,如银行,预订系统。

灵活性:

由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。

更快的速度:

分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。

开放系统:

由于它是开放的系统,本地或者远程都可以访问到该服务。

更高的性能:

相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。

3、分布式计算的缺点

故障排除:

故障排除和诊断问题。

软件:

更少的软件支持是分布式计算系统的主要缺点。

网络:

网络基础设施的问题,包括:传输问题,高负载,信息丢失等。

安全性:

开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。

4、关系型数据库和非关系型数据库的比较

4.1、关系型数据库

- 高度组织化结构化数据 
- 结构化查询语言(SQL) (SQL) 
- 数据和关系都存储在单独的表中。 
- 数据操纵语言,数据定义语言 
- 严格的一致性
- 基础事务

4.2、NoSQL

- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
-键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理 
- 高性能,高可用性和可伸缩性

关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。
但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。
相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库。
关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。
于是,非关系型数据库应运而生,由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要使用关系型数据库的。

5、NoSQL的优点/缺点

优点:

  • - 高可扩展性
  • - 分布式计算
  • - 低成本
  • - 架构的灵活性,半结构化数据
  • - 没有复杂的关系

缺点:

  • - 没有标准化
  • - 有限的查询功能(到目前为止)
  • - 最终一致是不直观的程序

到此这篇关于关系型数据库和非关系型数据库概述与优缺点对比的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Redis安装图文教程(Windows和Linux)

    目录 写在前面 Redis概述 Windows安装 Linux安装 写在前面 Redis概述 Redis是什么?Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.是NoSql之一,也被称作结构化数据库.官网:https://redis.io/中文官网:http://www.redis.cn/ Redis应用 内存存储和持久化 高速缓存 s

  • Windows系统安装redis数据库

    一.Redis简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis

  • 关系型数据库与非关系型数据库简介

    目录 关系型数据库: Oracle SQLServer Sybase Informix Access DB2 mysql vfp Ingers FoxPro 非关系型数据库: MongoDB Cassandra CouchDB Hypertable Redis Riak Neo4j Hadoop HBase Couchbase MemcacheDB REVENDB Voldemort 关系型数据库与非关系型数据库的对比 关系型数据库: 关系型数据库的优势: 保持数据的一致性(事务处理) 由于以标

  • MongoDB数据库介绍并用.NET Core对其进行编码

    浅入 MongoDB MonogoDB 是什么 MongoDB 是 NoSQL 型数据库,主要特征是存储结构化数据,MongoDB 是基于分布式文件存储的开源数据库系统. 结构化数据 以往我们使用 Mysql.SqlServer 等数据库,数据都是一条条的.MongoDB 的结构化数据正是区别于这种列-行式的数据. 结构化数据具有层级关系: 例如: { name: "MongoDB", type: "database", count: 1, info: { x: 2

  • Redis可视化连接服务器的方法

    目录 Redis安装 Redis配置 可视化工具安装 连接测试 Redis安装 Redis安装(Windows和Linux)详细图解 Redis配置 编辑配置文件redis.conf 在bind 127.0.0.1前加#,即注释掉 设置连接密码(可选) 修改完配置后,记得重启服务. 可视化工具安装 安利RedisDesktopManager,官网下载. 百度网盘下载:链接:https://pan.baidu.com/s/1rgBrxNNzOo80EwIY6Leu0g?pwd=526c 提取码:

  • .Net Core中使用MongoDB搭建集群与项目实战

    目录 安装MongoDB apt直接安装(方法1) apt仓库安装(方法2) 方法1.2启动MongoDB 通过二进制包安装(方法3) 安装依赖 deb安装MongoDB tgz安装MongoDB 启动MongoDB 卸载方法 apt卸载方法 tgz卸载方法 指定启动的配置 通过配置文件 通过参数 MongoDB绑定IP.端口 测试远程IP连接 加上密码验证 设置账号密码 开启登录验证 停止MongoDB 搭建集群 副本集 故障转移 方案 设计实例名称 如何创建集群 启动两个实例(配置) 副本集

  • MongoDB使用场景总结

    很多人比较关心 MongoDB 的适用场景,也有用户在话题里分享了自己的业务场景,比如 案例1 用在应用服务器的日志记录,查找起来比文本灵活,导出也很方便.也是给应用练手,从外围系统开始使用MongoDB. 用在一些第三方信息的获取或者抓取,因为MongoDB的schema-less,所有格式灵活,不用为了各种格式不一样的信息专门设计统一的格式,极大的减少开发的工作. 案例2 mongodb之前有用过,主要用来存储一些监控数据,No schema 对开发人员来说,真的很方便,增加字段不用改表结构

  • mongodb三分钟入门大全

    目录 一.MongoDB是什么 1.维基百科 2.简而言之 二.MongoDB 的应用场景 1.MongoDB事务 2.多引擎支持各种强大的索引需求 3.具体的应用场景 4.以下是几个实际的应用案例: 5.选择MongoDB的场景总结: 三.MongoDB对比MySQL 1.关键字对比 四.SpringBoot整合MongoDB实现增删改查 1.引入pom 2.启动类Application 3.实体类 4.UserRepository 5.业务层service 6.测试类 7.插入 8.更新 9

  • Redis使用命令行与多数据库配置

    一.Redis发送命令的两种方式 redis-cli -h localhost -p 6379redis-cli ping 返回pong 证明正常 二.命令返回值 1.状态回复,如ping命令 2.错误回复,如随便输入任意命令 3.整数回复,如某些命令会返回整数,incr(增加),decr(减少),dbsize(返回当前有多少个key) 4.字符串回复,如get命令,以双引号包裹,当请求的key不存在会得到一个空结果,返回(nil) 5.多行字符串回复,如keys *,返回所以key的名称 三.

  • 关系型数据库和非关系型数据库概述与优缺点对比

    目录 一.关系型数据库 1.概念 2.关系型数据库的特点 3.关系型数据库的瓶颈 4.关系型数据遵循ACID原则 1.A(Atomicity)原子性 2.C(Consistency)一致性 3.I(Isolation)独立性 4.D(Durability)持久性 二.NoSQL数据库 1.分布式系统 2.分布式计算的优点 3.分布式计算的缺点 4.关系型数据库和非关系型数据库的比较 4.1.关系型数据库 4.2.NoSQL 5.NoSQL的优点/缺点 一.关系型数据库 1.概念 关系型数据库:是

  • Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例

    非关系型图数据库Neo4j简介 Neo4j是现今最火爆的图数据.在2010年发布,产品的发展势头还算不错. 作为图数据库,Neo4j最大的特点是关系数据的存储. 图数据库除了能够像普通的数据库一样存储一行一行的数据之外,还可以很方便的看出存储数据之间的关系信息. 适合存储"修改较少,查询较多,没有超大节点"的图数据. 图数据库Neo4j应用场景 社交网络 根据用户与其他用户的关系为用户推荐新的朋友.例如,在QQ中给你推荐朋友的朋友 . 智能推荐引擎 通过分析用户有哪些朋友.用户朋友喜好

  • SQL Server数据库分离和附加数据库的操作步骤

    目录 1. 概述 2. 分离数据库 2.1 分离数据库的步骤 3. 附加数据库 3.1 附加数据的操作步骤 总结 1. 概述 若要将数据库移动或更改到同一计算机的不同 SQL Server 实例,分离和附加数据库会很有用:用户可以分离数据库的数据和事务日志文件,再将它们重新附加到同一或其他 SQL Server 实例中: 在 64 位和 32 为环境中,SQL Server 磁盘存储格式均相同,所以,能将 32 位环境中的数据库附加到 64 位环境中,反过来也行: 从运行在某个环境中的服务器实例

  • sql 语句 取数据库服务器上所有数据库的名字

    --取得所有数据库名 包括系统数据库 --SELECT name FROM master.dbo.sysdatabases --取得所有非系统数据库名 --select [name] from master.dbo.sysdatabases where DBId>6 Order By [Name] --取所有信息,包括数据库文件地址 --select * from master.dbo.sysdatabases where DBId>6 Order By [Name]

  • SQL Server数据库备份和恢复数据库的全过程

    目录 1. 概述 2. 备份类型 3. 恢复模式 3.1 简单恢复模式 3.2 完全恢复模式和大容量日志恢复模式 4. 备份数据库 5. 恢复数据库 总结 1. 概述 在一些对数据可靠性要求很高的行业,若发生意外停机或数据丢失,其损失是十分惨重的: 数据库管理员应针对具体的业务要求指定详细的数据库备份与灾难恢复策略,并通过模拟故障对每种可能的情况进行严格测试,只有这样才能保证数据的高可用性: 数据库的备份是一个长期过程,而恢复只在发生事故后才能进行,恢复后可看做是备份数据库的逆过程,恢复程度的好

  • MySQL数据库实验实现简单数据库应用系统设计

    目录 一.实验目的 二.实验要求 三.实现内容及步骤 1.学生表:student 2.寝室表:dormitory 3.管理员表:admin 四.实验总结 观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考,. 一.实验目的 1.理解并能运用数据库设计的常见步骤来设计满足给定需求的概念模型(ER模型)和关系数据模型:2.能结合有关的指南对模型进行优化处理.3.能够在某主流DBMS上创建数据库模式.所建数

  • 将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库

    下面我们就来说说如何从 SQLite 迁移到 MySQL . 准备 首先你要已经安装好 MySQL 数据库.如果你用的是 Ubuntu 系统,请参考这篇文章.其他系统请参考各自对应的文档. 导出当前数据 进入 http://your-domain.com/ghost/debug 页面: 点击蓝色的 EXPORT 按钮将当前数据库中的所有数据导出并下载到本地,默认文件名是 GhostData.json . 切换数据库配置 编辑 config.js 文件,在 production 配置段将数据库配置

  • mysql数据库迁移至Oracle数据库

    本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下 1.使用工具: (1) Navicat Premium (2) PL/SQL Developer 11.0 (3) Oracle SQL Developer 4.0.0.12.84(点击可进入下载页面) 特别说明:最初我用的一直是高版本的SQL Developer,但在数据库移植到大概两分钟的时候,总是报错,而错误信息又不明确.最后换成 Oracle SQL Developer 4.0.0.12.84,才把问题解决掉!如果

  • DB2数据库切换为oracle数据库经验教训总结(必看篇)

    由于DB2数据库使用的人太少,公司有没有专业的DBA,决定把数据库从DB2数据库切换为oracle数据库,本以为很简单,可当真的切换时,却发现,有很多东西出乎意料. 由于系统底层使用的是ORM映射工具,由于没有使用存储过程,自定义函数,触发器,因此我以为系统改动不大,但发现的问题却不少. 1.我们的主键基本上都采用共的是Sequence,没有采用自动增长作为主键. 但获取Sequence在两种数据库中是不相同的. DB2获取的方法 values next value for eas.seq_Se

随机推荐