数据库技术
# 前言
如果想查看详细的数据库发展史请到数据库专题:/后端服务/数据库
数据库从诞生之日起至今已近60年,从早期单纯的对数据文件的保存和处理,发展处以数据建模和数据库管理系统核心技术为主的一门内容丰富的学科,成为现代计算机应用系统的基础和核心。伴随着互联网、大数据、人工智能等技术的蓬勃兴起,数据库技术和产品更是百花齐放,带动了一个巨大的数百亿美元的软件行业。
本章主要讲述数据库的基本概念,数据库技术的发展历史,关系型数据库的架构演进以及关系型数据库的主流应用场景。
# 数据库技术
数据库技术是数据库管理的有效技术,研究如何对数据进行科学管理,从而为人们提供可共享的、安全的、可靠的数据。

# 数据
数据(Data),早期的计算机系统主要用于科学计算,处理的数据是数值型数据(整数和浮点数)。现代计算机系统的数据概念是广义的,包含数字、文字、图形、图像、音频、视频等。数据除了表现形式之外,还有语义。
语义
数据的含义称为数据的语义。
# 记录
记录(Record),记录是在计算机中表示和存储数据的一种格式或一种方法。

# 数据库
数据库(DataBase),是按照一定格式存储数据的一些文件的组合。顾名思义,存储数据的仓库,实际上就是一堆文件。这些文件中储存了具有特定格式的数据。
存放在数据库中数据的特点是:永久存储、有组织、可共享。
# 数据库管理系统
数据库管理系统(DataBase Manage System),是一个能够科学地组织和存储数据,高效地获取和维护数据的系统软件,是位于用户与操作系统之间的数据管理软件。 数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。其主要功能包括:
- 数据定义功能
- 数据组织存储和管理功能
- 数据操纵功能
- 数据库的事务管理和运行管理功能
- 数据库的建立和维护功能
- 与其他软件系统的通信功能
常见的数据库管理系统有:Mysql、Oracle、Sqlserver、DB2、SyBase 等。
# 数据库系统
数据库系统(DataBase System),是有数据库、数据库管理系统以及应用开发工具、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。

# 什么是SQL
SQL 是结构化查询语言,程序员通过编写 SQL 语句,然后 DBMS 负责执行 SQL 语句,最终来完成数据库中数据的增删改查操作。SQL 是一套标准,程序员学习的就是 SQL 语句,一般情况下,SQL 语句可以在各种数据库管理系统之间通用。
SQL语言:
- 高级的非过程化编程语言,允许用户在高层数据结构上工作
- 不要求用户指定数据存放方式
- 不需要用户了解具体数据存放方式
- 底层结构完全不同的各种关系型数据库系统可以使用相同的SQL语言作为数据操作和管理的接口

# 数据库、数据库管理系统和 SQL 之间的关系
DBMS ---> 执行 ---> SQL ---> 操作 ---> DB
数据库管理系统通过执行 SQL 语句来完成对数据库数据的管理。
# SQL 语句分类
- DQL 数据查询语言
select
DML 数据库操作语言
- 用于对数据库表中的数据进行操作,如插入、更新和删除。
insert,delete,update
DDL 数据定义语言
- 用于定义或修改数据库中的对象,如表、索引、视图、数据库、序列、用户、角色、表空间,会话等。
- DDL不支持物化视图、存储过程、触发器、自定义函数、自定义类型。
create,drop,alter

- TCL 事务控制语言
事务提交 commit,事务回滚 rollback
DCL 数据控制语言
- 用来设置或更改数据库事务、授权操作(用户或角色授权、权限回收、创建角色、删除角色等)、锁表(支持SHARE和EXCLUSIVE两种锁表模式)、停机等。
授权 grant,撤销权限 revoke
# 数据库技术产生与发展
数据库技术应数据管理任务的需求而产生。
数据管理的发展:
- 应用需求推动
- 软硬件的飞速发展为基础
- 三个阶段
- 人工管理阶段
- 文件系统阶段
- 数据库系统阶段


# 数据库系统优势
整体数据的结构化 数据面向整个系统而不是单个应用,被多个应用共享
数据的共享性高,冗余度低且易扩充
数据独立性高
- 物理独立性:应用程序与数据库中数据的物理存储是相互独立的
- 逻辑独立性:应用程序与数据库的逻辑结构是相互独立的
统一管理和控制:
- 数据的安全性保护
- 数据的完整性检查
- 并发控制
- 数据库恢复

# 数据库系统发展特点
- 数据库系统已经成为计算机信息系统和智能应用系统的核心技术之一和重要基础
- 数据库系统的发展特点
- 数据库的发展集中表现在数据模型的发展上
- 与其他计算机技术交叉结合
- 面向应用领域发展数据库技术

# 层次、网状、关系模型
- 层次模型:有且只有一个节点没有双亲,该节点被称为根节点;根节点以外的其他节点有且只有一个双亲节点。
- 网状模型:允许一个以上的节点无双亲;一个节点可以有多于一个的双亲。
- 关系模型:建立在严格的数据概念基础上;关系必须是规范化的;关系的分量必须是一个不可分的数据项。

- Codd博士继续发表多篇文章,论述范式理论和衡量关系系统的12条标准,用数学理论奠定了关系模型的基础。
- 关系模型是建立在集合代数基础上的
- 关系模型是一组关系组成的。每个关系的数据结构都是一张规范化的二维表。
- 一个关系通常对应一张表
- 元组:表中的一行行为就是一个元组
- 属性:表中的一列就是一个属性
- 码:也称为键
- 域:一组相同的数据类型的值的集合
- 关系模型:关系名(属性1,属性2,属性n)

# 关系型数据库 ACID 特性
- 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中的操作,要么都做,要么都不做。
- 一致性(Consistency):事务的执行结果必须是使数据库从一个一致性转到另一个一致性状态。
- 隔离性(Isolation):数据库中的一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他事务是隔离的,并发执行的各个事务不能相互干扰。
- 持久性(Durability):事务一旦提交,对数据库中数据的改变是永久的,提交后的操作或者故障不会对事务的操作结果产生任何影响。

# 其他数据模型
- 面向对象数据模型(Object Oriented Data Model OO模型)
- 将语义数据模型和面向对象程序设计方法结合起来,用一些列面向对象核心概念构成模型基础。
- 由于面向对象数据库操作语言过于复杂,没得到开发人员认可。
- XML 数据模型
- 随着互联网迅速发展,出现了大量的半结构化和非结构化的数据源。XML 成为网上交换数据的标准之一以及研究热点。相应地出现了半结构化数据的 XML 数据模型。
- 纯 XML 数据库基于 XML 节点树模型,可以支持XML数据管理。但是同样要解决传统关系型数据库所面临的各种问题。
- RDF 数据模型
- 互联网的信息没有统一表达方式。W3C提出资源描述框架来描述和注解互联网资源。
- RDF是描述互联网资源的标记语言。结构为主谓宾。
- 主要用于语义网、知识库的基础数据模型,是当前知识图谱技术的基石。
# 数据管理技术的新挑战
- 高度可扩展和可伸缩性
- 随着数据获取手段的自动化,多样化和智能化,导致数据量急剧增大。
- 数据类型多样和异构处理能力
- 结构化数据到半结构化数据非结构化数据。
- 文本到图形图像,音频视频等多媒体数据。
- 流数据,队列数据。
- 数据处理时效性要求
- 传感、网络和通信技术发展对数据快速流入和处理,实时性方面提出了更高的要求。
- 大数据时代来临
- 传统关系型数据库面对海量异构、形式复杂、高速增长、价值密度低的数据问题遇到全面挑战。
- NoSql 技术顺应大数据发展的需要,蓬勃发展。

# NoSql 技术特点和类型
- NoSql (Not Only SQL) 非关系型的,分布式的,不保证满足 ACID 特性的一类数据管理系统。
- 技术特点
- 对数据进行分区,利用大量节点并行处理获得高性能,同时能够采用横向扩展方式。
- 降低 ACID 一致性约束,允许暂时不一致,接受最终一致性。遵循 BASE(Basically Availbalble ,Soft state,Eventtual Consistency) 原则。
- 各数据分区提供备份(一般是三份),应对节点故障,提高系统可用性。

- NoSql 并不是为了取代 RDBMS
- 优势显著,缺点也较为明显。
- 与 RDBMS 一起构建完整的数据生态系统。

# 数据库排名

# 数据库架构发展
- 数据库架构变化
- 随着业务规模增大,数据库储存的数据量和承载的业务压力也不断增加,数据库的架构需要随之变化,为上层应用提供稳定和高效的数据服务。

单机构架
- 为了避免应用服务和数据库服务队资源的竞争,单机架构也从早期的单主机模式发展到数据库独立主机模式,把应用和数据服务分开。应用服务可以增加服务数量,进行负载均衡,增大系统并发能力。
单机架构 - 优点
- 部署集中,运维方便。
- 缺点
- 可扩展性:数据库单机架构扩展性只有纵向扩展。通过增加硬件配置来提升性能,但单台主机的硬件可配置的资源会遇到上限。
- 存在单点故障:扩容的时候往往需要停机扩容,服务停止;硬件故障导致整个服务不可用,甚至数据丢失。
- 单机会遇到性能瓶颈。
分组架构(主备)
- 数据库部署在两台服务器,其中承担数据读写服务的服务器称为主机
- 另外一台服务器利用数据同步机制把主机的数据复制过来,称为备机
- 同一时点,只有一台服务器对外提供数据服务
- 优点
- 应用不需要针对数据库故障来增加开发量
- 相对单机架构提升了数据容错性
- 缺点
- 资源浪费,备机和主机同等配置,但长期范围基本上资源限制,无法利用。
- 性能压力还是集中在单机上,无法解决性能瓶颈问题。
- 出现故障的时候,主备机切换需要一定的人工干预或者监控。

- 分组架构(主从)
- 部署模式和主备机模式相似,备机上升为从机,对外提供一定的数据服务。
- 通过读写分离方式分散压力
- 写入、修改、删除操作,在写库上完成
- 把查询请求,分配到读库
- 优点
- 提升资源利用率,适合多写少的应用场景。
- 在大并发读的使用场景,可以使用负载均衡在多个主机间进行平衡。
- 从机的扩展性比较灵活,扩容操作不会影响到业务进行。
- 缺点
- 延迟问题,数据同步到从机数据库时会有延迟,所以应用必须能够容忍暂时的不一致性,对于一致性要求非常高的场景是不是和的
- 写操作的性能压力还是集中在主机上。
- 主机出现故障,需要实现主从切换,人工干预需要响应时间,自动切换复杂度较高。

- 分组架构(多主)
- 数据库服务器互为主从,同时对外提供完整的数据服务。
- 优点
- 资源利用率较高的同时降低了单点故障的风险。
- 缺点
- 双主机都接受写数据,要实现数据双向同步。双向复制同样会带来延迟问题,极端情况下有可能数据丢失。
- 数据库数量增加会导致数据同步问题变的极为复杂,实际应用中都见双机模式。

- 共享存储多活架构
- 共享存储的多活架构
- 一种特殊的多主架构。
- 数据库服务器共享数据储存,而多个服务器实现负载均衡。
- 优点
- 多个计算服务器提供高可用服务,提供了高级别的可用性。可伸缩性,避免了服务器集群的单点故障问题。
- 比较方便的横向扩展能够增加整体系统并行处理能力。
- 缺点
- 实现技术难度大。
- 当存储器接口带宽达到饱和的时候,增加节点并不能获得更高的性能,存储IO容易称为整个系统的性能瓶颈。
- 共享存储的多活架构

- 分片架构
- 分片架构主要表现形式就是水平数据分片架构
- 把数据分散在多个节点上的分片方案,每一个分片包括数据库的一部分,称为一个shared。
- 多个节点都拥有相同的数据结构,但不同分片的数据之间没有交集,所有分区数据的并集构成数据总体。
- 常见的分片算法有:根据列表值,范围取值和Hash值进行数据分片。
- 优点
- 数据分散在集群内的各个节点上,所有节点可以独立性工作。
- 分片架构主要表现形式就是水平数据分片架构

- 无共享架构
- 集群中每一个节点(处理单元)都完全拥有自己独立的CPU/内存/存储,不存在共享资源。
- 各节点(处理单元)处理自己本地的数据,处理结果可以向上层汇总或者通过通信协议在节点间流转。
- 节点是相互独立的,扩张能力强。整个集群拥有强大的并行处理能力。

- MPP架构
- MPP大规模并行处理
- MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到的最终结果。
- 特征
- 任务并行执行,分布式计算
- 常见的MPP产品
- 无共享Master:Vertica,Teradata
- 共享Master:Greenplum,Netezza
- MPP大规模并行处理

# 数据库架构特点对比


# 关系型数据库主流应用场景
# 联机分析处理(OnLine Transaction Processing)
- OLTP
- 是传统关系型数据库的主要应用
- 面向基本的,日常的事务处理,例如银行储蓄业务的存取交易、转账交易等。
- 特点
- 大吞吐量:大量的短在线事务(插入、更新、删除),非常快速的查询处理。
- 高并发,实时响应。
- 典型的OLTP 场景
- 零售系统
- 金融交易系统
- 火车机票销售系统
- 秒杀活动
- 是传统关系型数据库的主要应用
# 联机分析处理(OnLine Analytical Processing)
- OLAP
- 联机分析处理的概念最早是E.F.Codd于1993年相对于OLTP系统而提出的。
- 是指对数据的查询和分析操作,通常对大量的历史数据查询和分析,涉及到的历史周期比较长,数据量大,在不同层级上的汇总,聚合操作使得事务处理操作比较复杂。
- 特点
- 主要面向侧重于复杂查询,回答一些战略性的问题
- 数据处理方面聚焦于数据的聚合,汇总,分组计算,窗口计算等分析型数据加工和操作。
- 从多维度去使用和分析数据。
- 典型的OLAP场景
- 报表系统,CRM系统。
- 金融风险预测预警系统、反洗钱系统。
- 数据集市、数据仓库。
# 数据库性能衡量指标
- TPC(Transaction Processing Performance Council ,事务处理性能委员会)
- 职责是制定商务应用基准测试标注的规范,性能和价格度量,并管理测试结果的发布。
- 制定的是标准规范而不是代码,任何厂家依据规范最优地构造自己系统进行评测。
- 推出了很多基准测试标准,其中针对 OLTP 和 OLAP 分别有两个规范。
- TPC-C 规范
- 面向 OLTP 系统,主要包括两个指标
- 流量指标: tpmc tpm-transactions per minuete 即每分钟测试系统处理的事务数量。
- 性价比指标:Price (测试系统价格)/ tmpc
- 面向 OLTP 系统,主要包括两个指标
- TPC-H 规范
- 面向OLAP类系统
- 流量指标:qphH - Query per hour 即每小时处理的复杂查询数量。
- 需要考虑测试数据集合大小,分为不同的测试数据集,指定了22个查询语句,可以根据产品微调。
- 测试场景:数据加载,Power 能力测试和 Throgut 测试。
- 面向OLAP类系统

# 数据库管理
- 数据库管理
- 数据库管理工作就是对数据库管理系统进行管理和维护的工作。
- 核心目标,保证数据库管理系统的。
- 稳定性
- 安全性
- 数据一致性
- 系统的高性能
- 数据库管理员
- 从事管理和维护数据库管理系统的相关人员的统称。
# 数据库管理工作范围
- 数据库对象管理
- 物理设计工作
- 物理实现工作
- 数据库安全管理
- 防止未授权访问,避免受保护的信息泄露
- 防止安全漏洞和不当的数据修改
- 确保数据只提供给授权用户使用
- 备份恢复管理
- 制定合理的备份策略,实现数据定期备份功能
- 保证灾难发生时数据库系统能够做到最快恢复和最小损失
- 数据库性能管理
- 对影响数据库性能的因素进行监控和优化
- 对数据库能使用的资源进行优化,从而增加系统吞吐量,并减少竞争,最大可能地处理工作负载
- 数据库环境管理
- 数据库的运行和维护管理
- 包括安装、配置、升级,迁移等确保数据库系统在内的IT基础设施正常运作的管理工作。
# 数据库对象
- 什么是数据库对象
- 数据库里用来存储和指向数据的各种概念和结构的总称。
- 对象管理就是使用对象定义语言或者工具创建,修改或删除各种数据库对象的管理过程。
- 常见的基本数据库对象

# 制定命名规范
- 良好的设计是良好的开端
- 数据库产品本身没有严格的限制
- 随意的对象命名会导致系统的不可控,不可维护
- 命名规范的几点建议
- 统一名称的大小写
- 利用前缀标识对象类型、如表名前缀t_,视图前缀v_,函数前缀f_等
- 命名尽量采用富有意义,易于记忆,描述性强、简短及具有唯一性的英文词汇,不建议使用汉语拼音
- 以项目为单位,采用名称词典,制定一些公共的缩略词,如amt代表amount 数量。

# 数据库恢复和备份的基本概念
- 数据库备份
- 备份数据库就是将数据库中的数据,以及保证数据库系统正常运行的有关信息保存起来,以备系统出现故障后恢复数据库的使用。
- 备份对象,包括但不限于
- 数据本身
- 和数据相关的数据库对象
- 用户及权限
- 数据库环境、如配置文件、定时任务等
- 数据库恢复
- 将数据库系统从故障或者瘫痪状态恢复到可正常运行,并能够将数据恢复到可以接受状态的活动。
# 灾难恢复
- 企业级容灾
- 对于企业和单位来说,数据库系统和其他应用系统构成更大的信息系统平台,所以数据库备份恢复并不是孤立的功能点,要和其他应用系统一并考虑整个信息系统平台的容灾性能。
- 灾难备份
- 为了灾难恢复而对数据、数据处理系统、网络系统、基础设施、专业技术能力和运行管理能力进行备份的过程。
- 恢复时间目标
- 灾难发生后,信息系统或业务功能从停顿到必须恢复的时间要求。
- 恢复点目标
- 灾难发生后,系统和数据必须恢复到的时间点要求。


# 备份方式
全量备份
- 也称为完全备份。
- 对某个指定时间点的所有数据和对应的结构进行一个完全的备份。
差异备份
- 差异备份是指上一次全量备份之后,对发生变化的数据进行的备份
增量备份
- 增量备份是指上一次备份之后,对发生变化的数据进行的备份。

热备
- 在数据库正常运行下进行备份。
- 备份期间,数据库读写均可正常运行。
温备
- 数据库可以用性弱与热备,备份期间,数据库只能进行读操作,不能进行写操作。
冷备
- 在备份期间,应用的读写操作不可进行。
- 备份出的数据可靠性最高。
物理备份
- 直接备份数据库所对应的数据文件甚至是整个磁盘。
逻辑备份
- 将数据从数据库中导出,并将导出的数据进行存档备份。

# 安全管理
- 广义范围,数据库安全框架可以分为三个层次
- 网络层次安全
- 从技术角度讲,网络系统层次安全方法技术主要有加密技术,数字签名技术,防火墙技术和入侵检查技术等。
- 操作系统层次安全
- 核心是最要保证服务器的安全,主要体现在服务器的用户账户,口令、访问权限等方面。
- 数据安全主要体现在加密技术、数据存储的安全性、数据传输的安全性等方面,如Kerberos,IPsec,SSL和VPN等技术。
- 数据管理系统层次安全
- 数据库加密
- 数据存取访问控制
- 安全审计
- 数据备份
- 网络层次安全
# 安全控制模型
- 安全控制
- 在数据库应用系统的不同层次提供对有意和无意损害行为的安全防范
- 加密存取数据-->有意非法活动
- 用户身份验证,限制操作权限--> 有意的非法操作
- 提高系统可靠性和数据备份--> 无意的损害行为
- 在数据库应用系统的不同层次提供对有意和无意损害行为的安全防范
- 安全控制模型

- 身份验证
- 数据库用户的身份验证是DBMS 提供的最外层安全保护措施
- 阻止未经授权的用户的访问
- 对于数据库应用目前普遍采用用户名密码验证模式,所以有必要增加没密码强度。
- 采用长度较长的字符串
- 混合数字,字母和符号的密码
- 定期更换密码
- 密码不能重复使用
- 在开发的代码或脚本中,禁止出现数据库用户的密码明文。
- 数据库用户的身份验证是DBMS 提供的最外层安全保护措施
# 访问控制
- 访问控制是数据库安全中最有效的办法也是最容易出现问题的地方
- 基本原则
- 对于不同用户根据敏感数据的分类要求,给予不同的权限
- 最小权限原则
- 检查关键权限
- 检查关键数据库对象的权限
- 基于角色的权限管理
- 对于大型数据库系统或者用户数量多的系统,权限管理主要使用基于角色的访问控制。
- 对于不同用户根据敏感数据的分类要求,给予不同的权限