关系型数据库

所谓关系型数据库,,就是指采用了关系模型来组织数据的数据库

什么是关系模型,简单说,关系模型就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

关系模型中常用的概念:

1、关系

可以理解为一张二维表,每个关系都有一个关系名,在数据库中被称为表名

2、元组

可以理解为二维表中的一行,在数据库中被称为记录

3、属性

可以理解为二维表中的一列,在数据库中被称为字段

4、域

属性的取值范围,在数据库中为某一列的取值限制

5、关键字

一族可以唯一标识元组的属性,在数据库中被称为主键

6、关系模型

指对关系的描述,其格式为:关系名(属性1、属性2、属性3、...、属性N),在数据库中称为表结构

关系型数据库的优缺点

关系型数据库有如下优点:

1、容易理解

二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解

2、使用方便

通用的SQL语言使得操作关系型数据非常方便

3、易于维护

丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大见底了数据冗余和数据不一致的概率

关系型数据库有如下缺点:

1、高并发读写

网站的用户并发性非常高,往往达到每秒上万次的读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

2、海量数据的高效率读写

网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是很低的

3、扩展性和可用性低

基于Web的结构当中,数据库是最难进行横向扩展的,同时对于数据库的升级也是非常痛苦的,往往需要停机维护和数据迁移

对于一个网站来说,关系型数据库的很多特性是不需要的:

1、事务一致性

关系型数据库在对事物一致性的维护中有很大的开销,而现在很多Web系统对事物读写一致性的要求都不高

2、读写实时性

对关系型数据库而言,插入一条数据之后立即查询,那肯定是可以读出这条数据的。但是对于很多Web系统来说并不需要这么高的实时性,比如发了一条消息后,过几秒乃至十几秒之后才看到这条动态数据是完全可以接受的

3、复杂SQL特别是多表关联查询

任何大数据的Web系统,都非常忌讳多个大表的关联查询以及复杂的数据复杂类型的复杂SQL报表查询,对很多网站来说,都要常常避免这点,因此极大弱化了SQL的功能

NoSQL

NoSQL,Not only SQL,即不仅仅是SQL,泛指非关系型数据库。因为传统的关系型数据库在应付Web2.0网站,尤其是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,NoSQL的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

NoSQL提出另一种不同的存储理念,例如以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己的资源,这样获取信息的时候就不需要像关系型数据库那样,对多表进行关联查询了。只需要根据键,拿到对应的value就可以完成一次查询。

不过,NoSQL由于极少的约束,因此它不能够像关系型数据库所提供的where这种对于字段属性值情况的查询,并且难以体现设计的完整性,它只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,关系型数据库显得更为合适。

关系型数据库VS非关系型数据库

关系型数据库最大的特点就是事物的一致性:传统的关系型数据库读写操作都是事物的,具有ACID的特点,这个特性使得关系型数据库可以用在几乎所有对一致性有要求的系统中,比如火车购票系统,抢票的时候同一时间只能有一个用户抢到某一张固定的车票。

但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,比方说淘宝吧,某件商品有10个库存量,用户A和用户B同时点了下单,照理说应该点击之后用户A和用户B看到的剩余库存量应该是8,但是实际上他们看到的可能同时都是9,这又有什么关系呢?在某些业务场景下,数据在几秒、十几秒的更新存在时间差是完全可以容忍的,因此,关系型数据库的最大特点在这里已经被淡化了。

相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能较差,而像微博、facebook这类SNS应用,对并发读写能力要求极高,关系型数据库已经无法应对了,因此,必须用一种新型的数据结构来替代关系型数据库。

关系型数据库的另一个特点就是其具有固定的表结构,因此,其扩展性能极差,而在SNS中,系统的升级、功能的增加,往往意味着数据结构巨大的变动,这一点关系型数据库也难以应付,需要新的结构化数据存储,

于是,非关系型数据库就应运而生,由于不可能用一种数据结构化存储应付所有的新需求,因此非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合

NoSQL:从关系型数据库到非关系型数据库的更多相关文章

  1. 关系型数据库 VS 非关系型数据库

    一.关系型数据库? 1.概念 关系型数据库是指采用了关系模型来组织数据的数据库.简单来说,关系模式就是二维表格模型. 主要代表:SQL Server,Oracle,Mysql,PostgreSQL. ...

  2. MongoDB(一):关系型数据库和非关系型数据库

    一.关系型数据库 1.概念 关系型数据库:是指采用了关系模型来组织数据的数据库,是目前各类数据库中使用最为广泛的数据库系统.简单的说,关系模型指的就是二维表格模型,一个关系型数据库就是由二维表及其之间 ...

  3. 数据库基础 非关系型数据库 MongoDB 和 redis

    数据库基础 非关系型数据库 MongoDB 和 redis 1 NoSQL简介 访问量增加,频繁的读写 直接访问(硬盘)物理级别的数据,会很慢 ,关系型数据库的压力会很大 所以,需要内存级的读写操作, ...

  4. Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念

    Java Redis系列1 关系型数据库与非关系型数据库的优缺点及概念 在学习redis之前我们先来学习两个概念,即什么是关系型数据库什么是非关系型数据库,二者的区别是什么,二者的关系又是什么? ** ...

  5. 【Redis】(1)-- 关系型数据库与非关系型数据库

    关系型数据库与非关系型数据库 2019-07-02  16:34:48  by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...

  6. Mysql-关系型数据库与非关系型数据库

    一.什么是数据库 数据库是数据的仓库. 与普通的"数据仓库"不同的是,数据库依据"数据结构"来组织数据,因为"数据结构",所以我们看到的数据 ...

  7. 关系型数据库 和 非关系型数据对比 以及 MySQL与Oracle对比

    一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库.    关系模型1970年提出的,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型.    简单来说,关系模型指的 ...

  8. python 之操作redis数据库(非关系型数据库,k-v)

    数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...

  9. Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

随机推荐

  1. 第二章 jQuery数组和字符串

    章节内容: 1.利用数组在列表中显示名字 (1)利用数组显示名字列表--join()方法 (2)从数组中获取名字并追加到有序列表--each()方法 (3)利用HTML元素创建数组和计算数组长度--g ...

  2. linux服务器apache 一个IP,一个端口,建立多个网站的方法。

    找到apache-tomcat-6.0.14\conf\server.xml ,再services 后面添加此段代码: Xml代码 <!-- 此处  新增的项目配置-->  <Ser ...

  3. Linux多线程服务端编程一些总结

    能接触这本书是因为上一个项目是用c++开发基于Linux的消息服务器,公司没有使用第三方的网络库,卷起袖子就开撸了.个人因为从业经验较短,主 要负责的是业务方面的编码.本着兴趣自己找了这本书.拿到书就 ...

  4. [修改后]html+css 做成一个可浏览的表格

    现在表格内容需要显示的要求如下: 1, 表格很大,界面放不小,需要放到div中. 2, 在div中可以用scroll滑动查看. 3, td中的内容保持在一行中. 4, 可以点击tr,然后可以选中并了解 ...

  5. C++中关于文件的读写

    在C++的学习过程中,我们时常要用到对文件的操作,下面我们讲一下文件的读写. 首先,读.也就是把已有的文件读到控制台上,那么如何操作呢?首先要将文件操作的输入输出流包含进去. <fstream& ...

  6. Windows netstat 查看端口、进程占用

    目标:在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. (1)查看该端口被那个PID所占用;方法一:有针对性的查看端口,在命令行下,使用命令netstat –an ...

  7. spring知识大全(3)

    4 Spring对持久层的支持 Spring对持久层的支持:① JDBC,② O/R Mapping(Hibernate,TopLink等) 一.Spring对持久层支持采用的策略: 1.Spring ...

  8. android nio

    Android开发进阶之NIO非阻塞包(二) 有关Android NIO我们主要分为三大类,ByteBuffer.FileChannel和SocketChannel.由于篇幅原因今天Android12 ...

  9. Hibernate和jsp做数据库单表的增删改查

    虽然很基础,但是我转牛角尖了~~~~这是几个文件 1.最重要的.Java文件 package com.chinasofti.hibb.struts; import org.hibernate.Sess ...

  10. SQL Split

    最初是根据数据ID批量删除数据,因为不知道到底是要删除多少条,而T-sql里也没有像C#中params这样方便的东西,所以想到字符串分割,但是发现T-sql中也没有提供字符串分割的函数,所以自己搜索了 ...