关系型数据库
当前主流的关系型数据库有Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL
关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
关系型数据库将数据存储在硬盘中
注: 数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。
关系模型中常用的概念:
* 关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
* 元组:可以理解为二维表中的一行,在数据库中经常被称为记录
* 属性:可以理解为二维表中的一列,在数据库中经常被称为字段
* 域:属性的取值范围,也就是数据库中某一列的取值限制
* 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
* 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, … … ,属性N),在数据库中成为表结构
特点:
1. 关系型数据库,是指采用了关系模型来组织数据的数据库
2. 关系型数据库的最大特点就是事务的一致性;
3. 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
优点:
1. 容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
2. 使用方便:通用的SQL语言使得操作关系型数据库非常方便;
3. 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
4. 支持SQL,可用于复杂的查询
缺点:
1. 高并发读写需求
网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
2. 海量数据的高效率读写
网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的
3. 高扩展性和可用性
在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像web server和app
server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。
非关系型数据库
* 不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
* 无共享架构
:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
* 弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
* 分区
:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
* 异步复制
:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
* BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
特点:
1. 使用键值对存储数据,数据没有耦合性,容易扩展
2. 分布式
3. 一般不支持ACID特性,无需经过sql层的解析,读写性能很高
4. 非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合
5. 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型
优点:
1. 面向高性能并发读写的key-value数据库:key-value数据库的主要特点即使具有极高的并发读写性能,Redis,Tokyo
Cabinet,Flare就是这类的代表
2. 面向海量数据访问的面向文档数据库:这类数据库的特点是,可以在海量的数据中快速的查询数据,典型代表为MongoDB以及CouchDB
3. 面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化
注:
全关系系统应遵循的基本准则:
1. 一个关系型的关系数据库管理系统必须能完全通过它的关系能力来管理数据库。
2. 信息准则 关系数据库管理系统的所有信息都应该在逻辑一级上用表中的值这一种方法显式的表示。
3. 保证访问准则 依靠表名、主码和列名的组合,保证能以逻辑方式访问关系数据库中的每个数据项。
4. 空值的系统化处理 全关系的关系数据库管理系统支持空值的概念,并用系统化的方法处理空值。
5. 基于关系模型的动态的联机数据字典 数据库的描述在逻辑级上和普通数据采用同样的表述方式。
6. 统一的数据子语言
一个关系数据库管理系统可以具有几种语言和多种终端访问方式,但必须有一种语言,它的语句可以表示为严格语法规定的字符串,并能全面的支持各种规则。
7. 视图更新准则 所有理论上可更新的视图也应该允许由系统更新。
8. 高级的插入、修改和删除操作 系统应该对各种操作进行查询优化。
9. 数据的物理独立性 无论数据库的数据在存储表示或访问方法上作任何变化,应用程序和终端活动都保持逻辑上的不变性。
10. 数据逻辑独立性 当对基本关系进行理论上信息不受损害的任何改变时,应用程序和终端活动都保持逻辑上的不变性。
11. 数据完整的独立性 关系数据库的完整性约束条件必须是用数据库语言定义并存储在数据字典中的。
12. 分布独立性 关系数据库管理系统在引入分布数据或数据重新分布时保持逻辑不变。
13. 无破坏准则 如果一个关系数据库管理系统具有一个低级语言,那么这个低级语言不能违背或绕过完整性准则。
参考:
1. 关系型数据库
<https://baike.baidu.com/item/%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93/8999831?fr=aladdin>
2. NoSQL <https://baike.baidu.com/item/NoSQL/8828247?fr=aladdin>
3. 关系型数据库和非关系型数据库的区别 <https://www.cnblogs.com/alilcu/p/8068259.html>
4. 关系型数据库和非关系型数据库区别、oracle与mysql的区别
<http://blog.csdn.net/ochangwen/article/details/53423301>
热门工具 换一换