数据库

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合

数据库系统的目标是为了解决文件处理系统的弊端:

  1. 数据冗余和不一致
  2. 数据访问困难
  3. 数据孤立
  4. 完整性问题
  5. 原子性问题
  6. 并发访问异常
  7. 安全性问题

数据库的4个基本概念

数据系统的特点

数据视图

系统开发人员通过几个层次上的抽系来对用户屏蔽复杂性,以简化用户与系统的交互

物理层(实际数据在物理上的存储结构)->逻辑层(数据库中存储什么数据及这些数据间存 在什么关系)->视图层(某种视角看到的数据)

实例是特定时刻存储在数据库中的信息集合,模式是数据库的整体设计。因此,数据库系统通常可以分为几种不同的模式:

数据模型是描述数据、数据联系、数据语义以及一致性约束等的一套工具,有四类

关系模型

关系模型基本概念对应的关系数据库的概念:

用元组的属性来区分不同的元组

模式图

一个模式图

关系运算

形式化关系查询语言

关系代数

一种过程化查询语言。它包括 一个运算的集合,这些运算以一个或两个关系为输入, 产生一个新的关系作为结果

运算类型:

关系代数中基本的表达式是:

数据库语言SQL

使用 DDL 来定义数据模式,使用 DML 来表达数据库的查询与更新

DML 分为过程式与声明式,像SQL就是典型的声明式

关系数据库基本概念

文件组织

定长记录

定长记录的文件可以通过维护一个已删除的位置链表,方便后续插入

变长记录

问题:

使用(偏移量,长度)描述一个字段

如何存储动态长度的行:用表头记录位置,尾部通过类似于顺序表的方式管理空间

行在文件中的组织方式

一个文件并非只能存一个表,多表聚簇文件组织可以将多个相关联的表在物理上存储到同一个文件组中,这样在查询的时候可以提高效率,同时也能降低空间成本

数据字典存储

描述表、索引、用户的数据如何存储,大部分数据库都将这些元数据以表的形式暴露出来,供外部读取操作

必须存储的信息类型:

数据库缓冲

数据库缓冲设计跟其他的缓存系统很像,要考虑缓存的淘汰策略,但也有一些是常规缓存没有的:

数据存储和查询

存储管理器

负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供接口的部件

查询处理器

查询处理

数据库将 SQL 转为关系代数,并对关系代数附上注释叫做计算原语,执行一个查询的原语操作序列称为查询执行计划(query-execution plan),查询执行引擎执行查询执行计划并将结果返回给前端,构造具有最小查询执行代价的查询执行计划叫做查询优化

衡量查询的代价:

选择运算

使用文件扫描和索引的选择

涉及比较的选择

复杂选择的实现

排序

数据库对不能全部放在内存中的关系会进行外排序,最常用的就是外部排序归并算法,利用外部文件多路归并拉实现

连接运算实现

所以为了效率,在选择外层循环的表(驱动表)的时候,一般是选择小表

由于内存缓冲总是有限的,块嵌套循环的驱动表能放入内存缓冲的数量也是有限的,由于内存缓冲的淘汰策略大部分都是LRU,可能就会导致内存缓冲的数据不断被淘汰,以载入块嵌套的缓冲,而这些被淘汰的数据可能都是热数据,这就很影响性能

其他运算实现

表达式计算

查询优化原理

一个给定的查询,通常会有许多种可能的执行策略,查询优化就是从这许多策略中找出最搞笑的查询执行计划的过程

产生逻辑一致的表达式 -> 产生不同的查询计划 -> 评估查询计划,选择代价最小的

关系表达式的转换

如果两个关系表达式在每一个有效数据库实例中都会产生相同的元组集,则称它们是等价的

等价规则

如集合的结合律:$$(E1\cup E2) \cup E3 = E1\cup (E2 \cup E3)$$

连接的次序

巧妙编排连接中关系的顺序可以有效减少临时结果大小

一个小关系连接大关系比大关系连接小关系查的更快

等价表达式的枚举

为了查询得到所有等价表达式,通过递归将子表达式进行等价替换来得到所有等价的表达式,在枚举这些表达式的过程中,可以根据代价来对一些表达式进行剪枝

表达式结果集统计大小的估计

为了计算查询的代价,要通过一些统计信息来进行,这个估计并不十分精确,这些统计数据大部分都是通过随机抽样来生成的,还有些数据库不会自动更新统计数据,而是让 DBA 手动运行命令的方式来进行生成

整体来说,这一部分就是要通过计算概率的方式,来计算出执行的代价

执行计划选择

物化视图

通过冗余,其内容已计算并存储的识图,这种物理视图的读取代价比逻辑视图低

视图维护

手工代码维护:真正的数据修改之后,再额外去修改物化视图的数据

增量视图维护:这种就是根据视图的查询语句,计算每次更新与物理视图会产生什么差异,再由系统去修改视图的数据,如:

查询优化和物化视图

物化视图可以被用来优化一些查询,假设要查询 a join b join c

现有 物化视图 v = a join b,通过 v join c 可以有效降低临时结果,降低查询代价

反过来也是 如果物化视图查询代价过高,可以把它拆分成原始查询

其他优化

事务管理

特性:A(原子性)C(一致性)I(隔离性)D(持久性)

事务

定义:数据库应用中完成单一逻辑功能的操作集合

数据库体系结构

数据挖掘与信息检索

数据挖掘定义:从数据库中发现知识

特种数据库

数据库系统的历史

NoSQL

充分利用各种不同NoSQL数据库的特性来助推业务