关系型数据库与NoSQL数据库简述
一、 关系型数据库
- 简单定义,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
- 关系模型中常用的概念:
-
- 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
- 元组:可以理解为二维表中的一行,在数据库中经常被称为记录
- 属性:可以理解为二维表中的一列,在数据库中经常被称为字段
- 域:属性的取值范围,也就是数据库中某一列的取值限制
- 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
- 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构
- 关系型数据库的优点:
-
- 容易理解
- 使用方便
- 易于维护
- 关系型数据库瓶颈 ------ > 于是有了非关系数据库
-
- 高并发读写需求-->对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
- 海量数据的高效率读写
- 高扩展性和可用性
- 对许多SNS(社交网络服务)网站来说,关系型数据库的很多特性不再需要了:
-
- 事务一致性 -- > 关系型数据库在对事物一致性的维护中有很大的开销,而现在很多web2.0系统对事物的读写一致性都不高。
-
- 简述web的几个版本
-
- web1.0网络是信息提供者,单向性的提供和单一性理解; 网络 - -> 人
- web2.0网络是平台,用户提供信息,通过网络,其他用户获取信息; 人- - > 人
- web3.0网络成为用户需求理解者和提供者,网络对用户了如指掌,知道用户有什么、要什么以及行为习惯,进行资源筛选、智能匹配,直接给用户答案。人-网络-人
- 读写实时性 - - > 对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出这条数据的,但是对于很多web应用来说,发一条消息之后,过几秒后才看到这条动态是可以接受的。
- 复杂SQL,特别是多表关联查询,很消耗性能,并且SNS类型的网站,从需求来说就避免了这种查询,往往更多的只是单表的主键查询,故SQL的功能极大的弱化了。
- 关系型数据库的最大特点就是事务的一致性,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。但它为了维护一致性所付出的巨大代价就是其读写性能比较差。故对于微博、facebook这类SNS的高并发读写的应用不适应。
- 针对SNS应用,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说相差几秒,故关系型数据库的最大特点在此用处不大。
二、非关系型数据库(NoSQL =not only sql )
- NoSQL,用于指代那些非关系型的,分布式的,且一般不保证遵循 ACID 原则的数据存储系统。非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
-
- 数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。
- 非关系型数据库分类
-
- 面向高性能并发读写的key-value数据库:key-value数据库的主要特点即使具有极高的并发读写性能,Redis ,Tokyo Cabinet,Flare就是这类的代表
- 面向海量数据访问的面向文档数据库:这类数据库的特点是,可以在海量的数据中快速的查询数据,典型代表为MongoDB以及CouchDB
- 面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化。
三、Redis 简介
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即 master-slave模式的数据备份。