关系型数据库与非关系型数据库
关系型数据库:
1、定义:
创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
2、关系模型常用概念:
(1)关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
(2)元组:可以理解为二维表中的一行,在数据库中经常被称为记录
(3)属性:可以理解为二维表中的一列,在数据库中经常被称为字段
(4)域:属性的取值范围,也就是数据库中某一列的取值限制
(5)关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
(6)关系模式:指对关系的描述。其格式为:关系名(属性1,属性2,... ,属性N),在数据库中成为表结构
3、关系模块中常用的操作:
(1)数据查询:选择、投影、连接、并、交、差、除
(2)数据操作:插入、删除、修改、查询
4、模式结构:
外模式、模式、内模式
5、特点:
(1)基于单一关系模型,结构化存储,有完整性约束
(2)通过二维表建立数据之间的联系
(3)采用结构化查询语言(SQL)做数据读写
(4)操作保存数据的一致性
6、优点:
(1)容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
(2)使用方便:通用的 SQL 语言使得操作关系型数据库非常方便
(3)易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
7、缺点:
(1)高并发读写需求:用户并发性非常高,对于传统关系型数据库来说,硬盘 I/O 是一个很大的瓶颈
(2)海量数据的高效率读写:网站每天产生的数据量是巨大的,对于关系型数据库来说,
在一张包含海量数据的表中查询,效率是非常低的
(3)高扩展性和可用性:在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量
与日俱增时,数据库却没法像 web server 和 app server 那样简单的通过添加更多的硬件
和服务节点来扩展性能和负载能力
非关系型数据库:
1、定义:
(1)对不同于传统的关系数据库的数据库管理系统的统称
(2)其数据存储可以不需要固定的表格模式,也经常会避免使用 SQL 的 JOIN 操作,一般有水平可扩展性的特征
2、主要分类:
(1)面向高性能并发读写的 key-value 数据库:key-value数据库的主要特点即使具有极高的并发读写性能,
Redis,Tokyo Cabinet,Flare就是这类的代表
(2)面向海量数据访问的面向文档数据库:这类数据库的特点是,可以在海量的数据中快速的查询数据,
典型代表为 MongoDB 以及 CouchDB
(3)面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,
可以适应数据量的增加以及数据结构的变化
3、特点:
(1)非结构化的存储
(2)基于多维关系模型
(3)具有特有的使用场景
4、优点:
(1)高并发,大数据下读写能力较强
(2)基本支持分布式,易于扩展,可伸缩
(3)简单,弱结构化存储
5、缺点:
(1)join 等复杂操作能力较弱
(2)事务支持较弱
(3)通用性差
(4)无完整约束复杂业务场景支持较差
总结:
1、关系型数据库和 NoSQL 数据库的选型,往往需要考虑几个指标:
(1)数据量 (2)并发量 (3)实时性
(4)一致性要求 (5)读写分布和类型
(6)安全性 (7)运维成本
2、常见软件系统数据库选型参考如下:
(1)内部使用的管理型系统:如运营系统,数据量少,并发量小,首选考虑关系型
(2)大流量系统:如电商单品页,后台考虑选关系型,前台考虑选内存型
(3)日志型系统:原始数据考虑选列式,日志搜索考虑选倒排索引
(4)搜索型系统:例如站内搜索,非通用搜索,如商品搜索,后台考虑选关系型,前台考虑选倒排索引
(5)事务型系统:如库存,交易,记账,考虑选关系型型+缓存+一致性型协议
(6)离线计算:如大量数据分析,考虑选列式或者关系型也可以
(7)实时计算:如实时监控,可以考虑选内存型或者列式数据库