高级数据库系统
本文章为高级数据库系统课程笔记,主要内容包括集中式数据库到分布式数据库的转换,以及大数据的处理。现予以收录和整理。
1 主要内容
集中式数据库到分布式数据库
大数据
2 分布式数据库系统
分布式数据库vs并行数据库:
分布式:物理上,数据库分布在不同服务器;节点自治。
并行:数据存储和查找都是统一调配;Hash桶。
分布式设计方式:
自顶向下(Top-down):用于从头设计或均质的系统。
自底向上(Bottom-up):用于已存在多个节点的系统。
提示
自顶向下设计过程:

2.1 核心问题
为什么分片(必须?安全性?并行性?)
如何分片
水平分片(Horizontal Fragmentation)
直接水平分片(Primary Horizontal Fragmentation):根据关系的某个属性,对关系进行选择运算。
派生水平分片(Derived Horizontal Fragmentation):根据关系的某个属性,对多个关系进行选择和连接运算。
垂直分片(Vertical Fragmentation):对关系进行投影运算,得到某些列。投影后每个分片必须要有主键,否则无法重构。
混合分片(Hybrid Fragmentation):先水平后垂直,或先垂直后水平。
分片大小如何
如何测试分片正确性
完整性(Completeness):分片后不丢失数据,即原关系中的任意一个数据项,均能在分片中找到。
可重构(Reconstruction):可还原,即对所有分片执行某些关系运算(水平:并;垂直:自然连接)后,得到原关系。
不相交(Disjointness):不相交,即任意一个分片中的任意一个数据项,不应该在其他分片中找到。相交则会导致数据不一致问题。
- 分配分片
不复制(Non-replicated):每个分片仅驻留在一个站点/节点
复制(Replicated):
完全复制:每个分片驻留在每个站点/节点
部分复制:每个分片驻留在某些站点/节点
- 信息需求
Database information
Application information
Communication network information
Computer system information
2.2 分布式查询处理和优化

查询分解:全局关系的演算查询 -> 全局关系的代数查询(全局节点)
规范化:处理查询量词和限定词
分析:检测和拒绝不正确的查询
简化:消除冗余谓词
重构:关系演算查询 -> 关系代数查询
数据本地化:分布式关系的代数查询 -> 分片查询(全局节点)
确定涉及哪些分片
本地化程序:用其具体化程序替换每个全局查询;优化
全局优化:分片查询 -> 优化后的分片查询(全局节点)
- 查找最佳(不一定最优)全局调度
局部优化:优化后分片查询 -> 优化后的局部查询(本地节点)
3 并行数据库系统
衡量并行数据库的两个参数:
speedup
scaleup
加速度:对于给定的任务,有 TS / TL,其中
TS:传统 DBMS 的耗时。
TL:资源较多的并行 DBMS 所花费的时间。
TS/TL:资源越多,任务时间就越短。
线性加速度:加速度为 N,而并行系统拥有传统系统的 N 倍资源。
放大:给定任务 Q 和任务 ( 是 Q 的 N 倍),一个 DBMS 和一个并行 DBMS ,(是 MS 的 N 倍),则有
- TS: 执行 Q 所花费的时间
- TL: 执行 所花费的时间
线性放大:如果 TL = TS,即如果资源与问题大小的增加成比例增加,则时间是恒定的。
重要
是否可以突破线性加速度限制?(不能, 4个原因)
启动成本:初始化每个进程
干扰:争夺共享资源(网络、磁盘、内存甚至锁)
倾斜:很难将任务划分为大小完全相同的部分;响应时间由最大部分决定
数据分区和分发成本
重要
并行数据库数据划分策略,分析对比并举例(3种)
循环划分:取模,划分平均且简单,容易丢失语义。
范围划分:按范围划分,适合数值型数据,如成绩。
Hash划分:对数据经过Hash函数映射到某个分区,适合字符串型。(数据精确匹配,查找快;不支持范围查询和组合查询)
4 NoSQL
4.1 大数据思维方式三个转变
全样而非抽样:过去数据存储和处理能力的限制,科学分析采用抽样方法;现在大数据核心就是海量数据存储和处理,使得科学分析完全可以针对全集数据。(方法)
效率而非精确:过去抽样分析的微小误差被放大到全集会变成很大的误差,传统数据分析注重精确性;现在大数据采用全样分析,不存在误差放大问题,而是关注实时分析结果,注重效率。(问题)
相关而非因果:过去数据分析目的是解释事物背后发展机理(如某超市利润下降,相关部门对销售数据分析找出原因);现在数据分析追求相关性(如在网站购买物品1,网站会提示你购买了物品1的客户还购买了物品2)。(目的)
4.2 四类 NoSQL数据库
四种NoSQL数据库:键值数据库、列族数据库、文档数据库、图数据库。
键值数据库:Redis
列族数据库:HBase(Google Big Table 的实现)
文档数据库:MongoDB
图数据库:Neo4j
| 类型 | 键值数据库 | 列族数据库 | 文档数据库 | 图数据库 |
|---|---|---|---|---|
| 数据模型 | 键值对,键是字符串,值是任意数据类型 | 行键、列族、列限定符、时间戳 | 键值,值是文档 | 图结构 |
| 典型应用 | 频繁读写,简单数据类型 | 拥有潜在大量数据的应用程序 | 存储管理面向文档的数据 | 处理具有高度相互关联关系的数据 |
| 优点 | 扩展性好,灵活性好,大量写操作时性能高 | 查找速度快,可扩展性强,容易进行分布式扩展,复杂性低 | 性能好(高并发),灵活性高,复杂性低 | 灵活性高,支持复杂的图形算法 |
| 缺点 | 无法存储结构化信息,条件查询效率较低 | 功能较少,大都不支持强事务一致性 | 缺乏统一的查询语法 | 复杂性高,只能支持一定的数据规模 |
提示
- 为什么说关系数据库无法满足Web2.0的需求?
无法满足海量数据的管理需求
无法满足数据高并发的需求
无法满足高可扩展性和高可用性的需求(水平扩展:增加节点;垂直扩展:单个节点升级)
- 为什么说NoSQL数据库与关系数据库相比具有灵活的数据模型?
大数据时代的数据主要是非结构化数据,不仅仅是数据的“大量化”,而是包含“快速化”“多样化”和“价值化”等多重属性。因而有了四种类型:键值数据库、列族数据库、文档数据库、图数据库。
NoSQL 数据库通过多样化的数据模型、动态模式、丰富的数据类型支持和良好的扩展性,为处理现代大数据提供了更灵活的数据存储方案。相比关系数据库的固定表结构,NoSQL 能够更好地适应数据的"快速化"、"多样化"和"价值化"特性,满足大数据时代的各种应用需求。
这种灵活性使得 NoSQL 数据库成为处理非结构化和半结构化数据的理想选择,同时也为开发者提供了更大的设计自由度,能够根据具体业务场景选择最适合的数据模型。
- 为什么说NoSQL数据库与关系数据库相比具有灵活的可扩展性?
NoSQL数据库:架构在HDFS上,是Hadoop生态系统的一部分,容易从单节点扩展到多节点,处理节点更多。
关系数据库:分布式和集中式,可扩展性差。
4.3 BASE vs ACID
NoSQL数据库特点:基本可用、软状态、最终一致性(BASE)。
基本可用:分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,即允许分区失败的情形出现
软状态:可以有一段时间不同步,具有一定的滞后性
最终一致性:允许后续的访问操作可以暂时读不到更新后的数据,但是经过一段时间之后,必须最终读到更新后的数据
关系数据库特点:原子性、一致性、隔离性、持久性(ACID)。
原子性:要么全都执行,要么全都不执行
一致性:事务在完成时,所有的数据都保持一致状态
隔离性:互不干扰
持久性:数据更改是持久的
4.4 CAP定理
C-Consistency:一致性。所有节点同一时间具有相同的数据。
A-Availablity:可用性。确定时间内返回操作结果。
P-Tolerance of Network Partition:分区容忍性。系统中部分节点无法与其他节点通讯时,系统正常运行。
CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个
重要
CAP定理举例:
CA:RDBMS
CP:MongoDB/HBase/Redis
AP:DynamoDB
注
题库
- 分布式数据库如何分片?
答:分布式数据库分片方式有:
水平分片:根据关系的属性对其进行选择操作,得到关系中的某些行。
垂直分片:对关系进行投影操作,得到关系中的某些列。投影后每个分片必须保留主键,否则无法重构。
混合分片:先水平分片后垂直分片,也可以先垂直分片后水平分片。
- 分布式数据库分片如何验证其正确性?
答:分布式数据库分片的正确性依据三个原则进行验证:
完整性:不丢失数据。即原关系中的任意数据项,均能在某个分片中找到。
可重构:可还原,即对所有分片执行某些关系操作,如并操作、自然连接等,可以得到原来的关系。
不相交:任意分片中任意数据项不会出现在其他分片中。
- speedup定义
答:speedup = TS/TL,对于给定的任务,TS是传统的DBMS的耗时,TL是资源更多的并行DBMS的耗时。线性 speedup 是指并行DBMS拥有传统DBMS的N倍资源时,speedup=TS/TL=N。
- scaleup定义
答:scaleup=TS/TL,对于任务 Q 和任务 ( 是 Q 的 N 倍),一个传统DBMS 和一个并行 DBMS (是 的 N 倍),TS是 执行 Q 所花费的时间,TL是 执行 所花费的时间。线性 scaleup 是指TS=TL,即资源随问题规模的增加而成比例增加,则时间恒定。
- 并行数据库数据划分策略,分析对比并举例(3种)
答:并行数据库的划分策略有:
循环划分:采用取模运算,将数据平均划分到多个分区。这种方式划分简单且均匀,但容易丢失语义,不适合跨分区操作。例如将学生成绩循环划分到多个分区,涉及多条数据的操作时,需要跨分区获取数据,增加传输开销。
范围划分:根据属性值的取值范围,将数据划分到多个范围分区。这种方式适合范围查询,但容易导致数据分布不均匀。例如将学生成绩范围划分到多个分区,当查询某个分数段的成绩时,可快速定位到某个分区获取数据。
Hash划分:通过特定的 Hash 函数对数据的某个属性进行计算,得到 Hash 值,再根据 Hash 值将数据映射到不同的分区。适合精确匹配的场景,不适合范围查询和组合查询。例如将学生姓名Hash划分后,需要查询某个学生信息时,可快速定位到该学生所在分区。
- 是否可以突破线性加速度限制?(不能,4个原因)
答:不能突破线性加速度限制。原因如下:
启动成本:初始化每个进程需要额外开销。
干扰:争夺共享资源(如网络、内存、磁盘甚至锁)需要额外开销。
倾斜:很难将任务划分为大小完全相同的部分,而响应时间又是由最大部分决定的。
数据分区和分发成本:数据划分和传输需要额外开销。
- 大数据思维方式(3种)
答:大数据思维方式包括:
全样而非抽样:过去数据存储和处理能力的限制,科学分析采用抽样方法;现在大数据核心就是海量数据存储和处理,使得科学分析完全可以针对全集数据。
效率而非精确:过去抽样分析的微小误差被放大到全集会变成很大的误差,传统数据分析注重精确性;现在大数据采用全样分析,不存在误差放大问题,而是关注实时分析结果,注重效率。
相关而非因果:过去数据分析目的是解释事物背后发展机理(如某超市利润下降,相关部门对销售数据分析找出原因);现在数据分析追求相关性(如在网站购买商品1,网站会提示你购买了商品1的客户还购买了商品2,即推荐相关商品)。
- NoSQL数据库
答:NoSQL数据库包括4类:
键值数据库:Redis
列族数据库:HBase(Google Big Table 的实现)
文档数据库:MongoDB
图数据库:Neo4j
| 类型 | 键值数据库 | 列族数据库 | 文档数据库 | 图数据库 |
|---|---|---|---|---|
| 数据模型 | 键值对,键是字符串,值是任意数据类型 | 行键、列族、列限定符、时间戳 | 键值,值是文档 | 图结构 |
| 典型应用 | 频繁读写,简单数据类型 | 拥有潜在大量数据的应用程序 | 存储管理面向文档的数据 | 处理具有高度相互关联关系的数据 |
| 优点 | 扩展性好,灵活性好,大量写操作时性能高 | 查找速度快,可扩展性强,容易进行分布式扩展,复杂性低 | 性能好(高并发),灵活性高,复杂性低 | 灵活性高,支持复杂的图形算法 |
| 缺点 | 无法存储结构化信息,条件查询效率较低 | 功能较少,大都不支持强事务一致性 | 缺乏统一的查询语法 | 复杂性高,只能支持一定的数据规模 |
- 简述为什么说关系数据库无法满足Web2.0的需求?
无法满足海量数据的管理需求。
无法满足数据高并发的需求。
无法满足高可扩展性和高可用性的需求(水平扩展:增加节点;垂直扩展:单个节点升级)。
- 为什么说NoSQL数据库与关系数据库相比具有灵活的数据模型?
关系数据库的数据主要是结构化数据。而NoSQL数据库适用于大数据场景。
大数据主要是非结构化数据,包含“大量化”“快速化”“多样化”和“价值化”等多重属性。因而有了四种NoSQL数据库类型:键值数据库、列族数据库、文档数据库、图数据库。
- 为什么说NoSQL数据库与关系数据库相比具有灵活的可扩展性?
关系数据库包括分布式和集中式,其可扩展性较差。
NoSQL数据库架构在HDFS上,是Hadoop生态系统的一部分,容易从单节点扩展到多节点,因而处理节点更多,可扩展性强。
- 分析对比BASE和ACID (基本可用、软状态、最终一致性)
原子性:要么全都执行,要么全都不执行
一致性:事务在完成时,所有的数据都保持一致状态
隔离性:互不干扰
持久性:数据更改是持久的
基本可用:分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,即允许分区失败的情形出现
软状态:可以有一段时间不同步,具有一定的滞后性
最终一致性:允许后续的访问操作可以暂时读不到更新后的数据,但是经过一段时间之后,必须最终读到更新后的数据
- CAP定理及举例
- C-Consistency:一致性。所有节点同一时间具有相同的数据。
- A-Availablity:可用性。确定时间内返回操作结果。
- P-Tolerance of Network Partition:分区容忍性。系统中部分节点无法与其他节点通讯时,系统正常运行。 CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个。例如RDBMS,具有一致性和可用性,但是存在分区失败的问题,即牺牲了分区容忍性。
- 从数据库设计角度,分析对比分布式数据库和集中式数据库的主要区别。
设计目标:集中式数据库追求单一节点的强一致性与简单管理,通过纵向升级硬件提升性能;分布式数据库以去中心化架构实现弹性扩展,牺牲部分一致性换取高可用性与并行处理能力。
数据分布:集中式数据存储于单机,无节点通信开销;分布式通过分片/复制将数据分散至多节点,需处理跨节点同步与网络通信。
应用场景:集中式适用于数据量小、强一致性的中小型系统(如企业ERP);分布式适合PB级数据、百万级并发的互联网场景(如电商平台、物联网)。
- 从数据库设计角度,分析对比分布式数据库和并行数据库的主要区别。
设计目标:分布式数据库以数据分布与跨节点协同为核心,支持异构部署;并行数据库聚焦同构集群内的计算并行,优化复杂查询。
数据分布:分布式数据库按业务逻辑分片 / 复制,适应多地域场景;并行数据库侧重集群内数据分区,提升并行计算效率。
应用场景:分布式数据库适合高并发的联机事务处理,支持弹性扩展;并行数据库更适用于联机分析处理,通过架构加速大规模数据处理。
- NoSQL数据模型是否能替代关系数据模型?
NoSQL数据模型无法完全替代关系数据模型,二者是互补关系:
技术特性互补:关系型数据库采用结构化表结构,支持ACID事务和复杂SQL查询;NoSQL支持非结构化数据,遵循BASE原则,扩展性和读写性能更优。
适用场景互补:关系型数据库适用于强事务、复杂关联查询场景;NoSQL适合非结构化数据处理、高并发实时读写和海量数据存储分析。
混合架构主流:企业多采用“关系型+NoSQL”混合架构,根据业务场景,发挥各自优势。
- 大数据应用:具体分析1~2个应用,e.g. 推荐系统 etc.
推荐系统是大数据应用的典型场景。它通过采集用户点击、浏览、购买等行为数据,利用Hadoop、Spark等技术处理分析,构建用户画像与物品特征模型。例如电商平台会整合用户基础属性、行为偏好及商品类目、价格等信息,通过协同过滤、深度学习等算法匹配推荐,并借助Flink等实现实时更新。像抖音每日处理超百亿次用户交互数据,结合视频文本、音频等多模态特征,用Flink实时计算用户近期行为,通过A/B测试优化策略,实现精准内容推送。大数据技术让推荐从人工经验转向数据驱动,提升用户体验与商业效率。
- 《高级数据库系统》学习收获。
高级数据库系统课程围绕分布式、并行与NoSQL数据库展开,构建了系统化高级数据库体系:
分布式数据库以数据分片与复制技术解决存储瓶颈,通过CAP定理和BASE理论平衡一致性与可用性,典型如电商订单系统的分布式架构设计。
并行数据库依托Shared Nothing等架构实现计算加速,通过范围划分、哈希划分等数据划分方法优化数据分布,结合查询并行化提升大规模数据处理效率,需关注负载均衡与通信开销。
NoSQL数据库打破结构化限制,按键值型(Redis)、文档型(MongoDB)、图类型(Neo4j)等类型适配不同场景,以分布式扩展应对非结构化数据需求。
综合启示:实际应用中,技术选型需结合业务场景,结合当前云计算、NewSQL及AI驱动优化等行业技术,多种技术的融合应用(如混合存储架构)是解决复杂数据问题的关键。