尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

分布式数据库系统复习:分片、查询优化与事务并发考点精析

发布时间:2026/9/26 14:50:51

资讯中心
01
ARTICLE

分布式数据库系统复习:分片、查询优化与事务并发考点精析

分布式数据库系统复习:分片、查询优化与事务并发考点精析
简介这是一份面向数据库课程学习者与期末备考者的分布式数据库复习资料以典型考点清单的方式呈现适配正在学习分布式数据库原理、需要考前集中梳理的学生。文档采用填空、简答与论述三种题型覆盖同构/异构DDBS分类、全局控制类型、数据分片与分布策略、多层模式结构、DDBS基本功能模块、分布透明性层次、分布式数据库创建方法、DATAID-D设计阶段、分布式事务ACID特性、事务控制模型、故障与恢复、并发控制封锁算法、死锁预防与检测等核心知识点并针对简答和论述题给出了详细参考答案与要点提示便于读者逐项自测、背诵和查漏补缺。资源为1个doc文档大小仅38KB内容紧凑重点突出可在较短时间内完成一轮系统复习。已有656人学习下载是一份适合配合教材与课件使用的补充梳理材料能够帮助读者快速巩固分布式查询优化、数据分配与事务管理中的关键概念。1. 分布式数据库系统复习资料这份 .doc 能帮你背完哪些必考点期末复习分布式数据库系统最怕的不是记不住而是不知道从哪背起。这份复习.doc 像一份内部押题清单从填空、简答到论述把考点按题型全部过了一遍同构/异构分类、四种数据分配策略、查询代价与优化、事务封锁和死锁检测、DATAID-D 设计阶段全都覆盖。它能解决的是“第一轮看什么、第二轮背什么、第三轮怎么答”的问题适合期末冲刺、考研复试考数据库原理以及马上要面分布式存储基础的人。我拿到手先做了一件事把填空当索引把简答当背诵点把论述当技术方案重新整理。下面是我拆完这份资料后最值得照着背的几条主线。2. 分片与数据分配四种策略、三种分法和三条准则一次记牢2.1 数据分布有四种策略先分清楚再背“数据分配”这四个字在分布式数据库系统里指的是数据在网络各场地上的存放策略。资料里给了四种集中式、分割式、复制式和混合式。先不急着背名字先想清楚一个场景订单数据是全部堆在一个机房还是拆开放在几个机房还是每个机房都存一份还是只把热点数据存到多个机房四种策略对应的正是这四种情况。策略存放方式读表现写与一致性成本适用场景集中式所有数据放在同一个场地集中、好管理单点压力大早期系统、小规模业务分割式数据只有一份分散在多个场地就近读一部分跨场地查询高数据量可控、允许单副本复制式每个场地都保存完整副本读最快每次写要同步全部副本读多写少、高可用诉求强混合式数据库分成若干可相交子集按需放置按热点分布一致性和分配策略复杂大规模真实业务做题时抓题干关键词出现“所有数据均安排在同一个场地”选集中式“只有一份分别安置在若干个场地”选分割式“在每个场地重复存储”选复制式“若干可相交的子集”选混合式。这里容易翻车的地方是分割式和水平分片混淆分割式说的是全局数据只存一份但分开部署分片说的是关系内部的片段划分两者不是一个层面答题时别混着写。选型理由要放在场景里理解。集中式其实不是严格意义上的分布式但因为管理简单在一些强一致、小规模系统里仍然会被拿来当初始方案分割式节省存储但不抗站点故障复制式读取体验好写放大的代价在互联网业务中往往不能接受混合式是前面三种的折中也是我实际见过的大多数分布式存储采用的思路对不同数据分片设置不同副本数热点数据多副本冷数据少副本。2.2 分片三种方法与三条准则数据分片是把一个全局关系 R 拆成片段三种基本方法是水平分片、垂直分片和混合分片。水平分片是把关系中的元组行按某种条件划分成若干不相交子集垂直分片是把关系的属性集拆成若干子集在每个子集上做投影混合分片则是把两者组合使用。用一个订单表举例。水平分片可以写成R1 是华东订单R2 是华北订单按 region 字段分垂直分片可以写成S1 包含 order_id、cust_id、amountS2 包含 order_id、order_date、status投影时 order_id 必须保留因为它承担重构主键的角色。重构也有固定套路水平分片用并操作 UNION 把片段拼回去垂直分片用连接操作 JOIN 按主键拼回去。数据分片的准则有三条完备性、可重构和不相交。完备性要求全局关系的所有数据都映射到片段里不能漏数据可重构要求能由片段重建全局关系不相交要求各片段互不重叠垂直分片只允许主键重叠。我习惯把它压缩成九个字记忆不漏、能回、不重。考试里的坑在于“不相交”和“只包含主键重叠”同时出现时有人会认为两者矛盾其实不矛盾水平分片完全不相交垂直分片允许主键列重叠因为在垂直投影时必须保留主键才能做连接。资料还单列出水平分片的两种做法初级分片和导出分片。初级分片直接用关系自身属性的谓词来分比如按订单金额是否大于一万元分成两个片段导出分片是参照另一个关系的分片方式来分比如按照客户所属站点拆分订单表。为什么会有导出分片为了把经常要连接的两个表按照同一个键分到同一批站点让连接尽量在本地完成减少跨站点传输。这个动机在后面查询优化里会再次出现两章可以连起来背。2.3 分布透明性、多层模式结构与创建方法分布透明性有三个层次分片透明性、位置透明性和局部数据模型透明性。分片透明性是最高级应用连全局关系被分成了几块都不知道仍把它当作一个完整的表来操作位置透明性次之应用知道存在分片但不知道每个分片放在哪个站点站点迁移不影响业务局部数据模型透明性最低连站点上用的数据模型或 DBMS 类型也被隐藏。判断层次有个小技巧从“知不知道分片”到“知不知道位置”再到“知不知道局部模型”隐藏程度逐级降低。资料里分布式数据库系统的多层模式结构刚好和透明性配套全局外层、全局概念层、局部概念层、局部内层。全局外层对应应用程序看到的全局视图全局概念层描述全局数据的逻辑结构局部概念层把全局概念映射到各站点的局部模式局部内层对应本地物理存储。透明性不是玄学是靠这四层之间的映射关系实现的。分布式数据库系统的创建方法有组合法和重构法。组合法是从集中式数据库出发逐步把数据分布到多个站点重构法是把若干已经存在的数据库重新组织、集成成一个分布式系统。选型看起点从零开始建设适合组合法历史遗留系统整合适合重构法。做填空时看到“集中式数据库设计阶段之外增加了一个新阶段”答案是分布设计它位于逻辑设计和物理设计之间这个位置关系值得单独圈出来。资料里还有两句容易被略过的填空分布式数据库是各站点上数据库的逻辑集合由应用数据库和描述数据库组成一个分布式数据库管理系统包括查询处理模块、完整性处理模块、调度处理模块和可靠性处理模块。简答题第一道也很固定分布式数据库系统的特点包括物理分布性、逻辑整体性、站点自治性、数据分布透明性、集中与自治相结合、存在适当数据冗余度、事务管理的分布性。背的时候把“物理分布、逻辑整体、站点自治”这一组关键词放前面后面跟着透明性和冗余度不容易漏。3. 把查询优化拆成一条线从查询代价到片段查询树3.1 查询代价 QC 与优化准则分布式查询优化和单机最大的不同在于多了一项通信代价。单机数据库优化时考虑的是 I/O 代价和 CPU 代价磁盘读盘的次数、内存排序的规模分布式环境下数据分散在多个站点连接操作可能要跨网络搬运数据通信费往往是最贵的。资料给出的分布式查询优化准则是“通信费用和响应时间最短”查询代价公式要背准QC I/O 代价 CPU 代价 通信代价。这个公式的意思是分布式查询优化本质上是在总代价里权衡三者的占比。同一个查询在局域网和高延迟广域网里的最优执行计划完全不同局域网里多传一点数据可能无所谓远程数据传输成本高时全局优化就要优先压缩中间结果。做题时如果遇到“站点 CPU 很便宜但跨站点网络很慢”这类场景答案应该往“减少通信量”方向写。分布式环境下的查询分成三种类型局部查询、远程查询和全局查询。局部查询的目标数据和优化都在同一个站点基本退化为集中式优化远程查询要访问另一个站点的数据但只涉及一个远程站点重点是远程站点内的执行计划和结果回传全局查询要访问多个站点的数据必须做跨站点连接、并集和排序这也是分布式查询优化真正要解决的问题。我一般会让学生先判断题干的查询落在哪个范围再决定写哪一层的优化策略避免一上来就写全局优化。3.2 查询处理四层各有输入输出资料明确给出了分布式查询处理的四层查询分解、数据本地化、全局优化、局部优化。这四层有严格先后顺序不能颠倒。第一层查询分解把用户写的 SQL 或查询请求转换成关系代数表达式同时做合法性检查确认涉及的关系和属性都存在输出是一棵全局查询树这棵树用的还是全局关系名。第二层数据本地化把全局查询树上的全局关系名替换成各个片段的名称用分片重构规则把关系恢复成片段集合。水平分片对应并操作垂直分片对应连接操作替换完成后得到基于片段上的查询树。第三层全局优化在片段查询树基础上选择执行顺序、确定站点间传输方案目标是让通信费用和响应时间尽量小。第四层局部优化各站点对分到自己手里的子计划按集中式数据库方式优化比如选择索引、决定连接算法。可以用一张表把每层的核心输出固定下来查询分解输出全局查询树数据本地化输出片段查询树全局优化输出全局执行计划局部优化输出各站点执行计划。这样填空即使考“某层的输入是什么”也能顺着上一层的输出推出来。资料里还提到关系代数等价变换的优化算法它的位置就在全局优化层把选择和投影尽量先做减少传输和处理的数据量。3.3 关系代数等价变换的四个实现步骤基于关系代数等价变换的查询优化核心原理是把查询转成关系代数表达式得到查询树从全局树变换到片段树再用等价规则把代价高的操作往后挪、把代价低的操作往前挪。实现步骤可以拆成四步。第一步把查询问题转换成关系代数表达式。比如要查“华东客户在最近一个月的订单号”先写出选择、连接和投影的关系代数式。第二步对表达式做语法分析得到一棵语法树内部节点是关系代数操作符叶子节点是关系名。第三步从全局查询到片段查询的变换用重构该全局关系的片段名替换叶子节点上的全局关系名。第四步利用等价变换规则优化片段查询树典型动作是把选择尽量下推到片段内部、把投影提前、调整连接顺序。我习惯用一个 SQL 例子来印证这套流程。假设有订单表 orders 和客户表 customers查询语句是SELECT o.order_id FROM orders o, customers c WHERE o.cust_id c.cust_id AND c.region 华东;转换成关系代数后先得到全局查询树。如果 orders 和 customers 都按客户编号水平分片数据本地化会把全表名替换成 orders_1 到 orders_n、customers_1 到 customers_n。优化时先把 c.region 华东 这个选择下推到 customers 的每个分片内部再做同一站点内的连接最后把各站点的结果合并。这样做能明显减少参与跨站点连接的数据行数避免把整张 customers 表传到中心站点。逻辑说明是“先选择、后连接、再投影”的规则为什么成立连接操作会把两侧关系做笛卡尔积再过滤尽早过滤行和列能成倍减少中间结果数据量小了通信代价自然下降。参数说明主要看三个东西选择谓词放在哪一层、投影属性集是否保留了连接键、分片谓词和选择谓词是否一致。如果分片键正好是连接键优化效率最高这也是 2.2 节里导出分片要按连接关系分片的原因。4. 事务与并发控制模型、封锁算法和死锁检测怎么分组记4.1 分布式事务结构与三种控制模型一个分布式事务通常由主事务和子事务组成。主事务负责全局协调子事务分布在各站点执行局部操作。资料里给出的一般结构是Begin Transaction 原语开始事务中间是若干子事务或操作序列 T1、T2、……、Tn然后通过 Commit 原语标志事务成功完成或者通过 Rollback / Abort 原语标志事务失败结束。这三个原语的名字和语义是最容易考的填空Begin 是开始Commit 是成功结束Rollback 或 Abort 是失败结束。分布式事务控制模型有三种主从模型、三角模型、层次模型。主从模型是单个主事务直接控制所有子事务像星形拓扑实现简单站点少时很直观但主事务节点一旦故障整个事务失控三角模型引入控制者和参与者控制者下面还可以挂参与者协调关系像三角形或一个小型树负载比主从分散层次模型里的控制关系逐级向下传递父事务控制子事务、子事务再控制孙事务扩展性最好代价是路径变长、调试和故障定位更复杂。这三种模型选哪个看的是站点规模和故障隔离要求。站点少选主从视图清晰站点多、控制关系有层级就选三角或层次。资料里还单列了通信故障的两种类型报文故障和网络分割故障。报文故障是报文在传输中丢失或损坏不一定是网络断网络分割故障是把网络切成几个互不相连的孤立区域数据一致性受到更大威胁。事务恢复主要依靠日志这是分布式事务能回滚的前提各站点把子事务的操作写入本地日志崩溃后根据日志决定重做还是撤销。4.2 并发控制机制与四类基本封锁算法并发控制机制分悲观并发控制法和乐观并发控制法。悲观控制在操作前就加锁、检测冲突适合事务冲突率高的场景代价是阻塞和死锁处理乐观控制让事务无锁执行提交时再验证是否有冲突读多写少时性能好冲突率高就会大量重试反而不划算。资料列出的四类基本封锁算法是简单的分布式封锁方法、主站点封锁法、主副本封锁法和快照方法。简单分布式封锁方法由各站点自主管理本地数据的锁没有集中协调点并发度分散但全局死锁检测会变得复杂主站点封锁法把锁管理集中到一个主站点算法简单、全局状态清楚但主站点一旦故障所有加锁操作都会停摆主副本封锁法让每个数据项的主副本所在站点负责锁管理锁管理权跟着主副本走比单主站点更灵活但发生主副本切换时恢复逻辑比较繁琐快照方法不阻塞读读操作读的是一个一致快照版本写操作在提交时检查冲突适合读多写少的系统。记这四种算法我用一句话简单的各自管主站的统一管主副本的跟着主副本走快照的不加锁。做题时题目给“锁管理集中在单个站点”就选主站点封锁法给“主副本所在站点管理”就选主副本封锁法给“读无阻塞、提交时验证”就选快照方法。要特别小心“主站点封锁法”和“主副本封锁法”一字之差前者是全局统一一个锁站点后者是每个数据项各有一个锁站点。4.3 死锁的预防与检测要分开背预防死锁有两种方法非占先权方法和占先权方法。非占先权方法本质上是让事务在等待资源时不抢占别人已经持有的锁所有资源都只能被持有者主动释放占先权方法允许高优先级事务抢占低优先级事务的资源被抢占的事务回滚重来。两者的取舍是非占先权更公平但可能因长事务持有锁导致短事务反复等待占先权能快速打破僵局但要付出回滚代价。检测死锁的三种方法是集中式、层次式和分布式。集中式检测由单一站点汇总所有站点的等待信息构建全局等待图发现环就回滚某个牺牲者层次式检测把等待信息按树形分层汇总中心负载比集中式低但检测延迟稍高分布式检测中每个站点维护自己的局部等待图站点之间周期性交换路径信息最终发现环路算法复杂度最高但扩展性最好。这个考点的最大坑在于“预防”和“检测”易混。我见过不少人背到后面把“集中式、层次式、分布式”填到预防死锁的题目里。判断方法很简单看到“非占先/占先”是预防看到“集中/层次/分布”是检测两个集合不交叉。资料里还提到事务四个特性——原子性、一致性、隔离性、耐久性——背 ACID 时建议和日志、回滚放在一起原子性靠日志保证一致性靠完整性模块隔离性靠并发控制耐久性靠日志刷新。5. 避坑分布式数据库系统复习时最容易记混的八个考点这一章把我拆这份资料过程中最常踩的坑集中写出来。以下八条不是单纯记忆问题而是答题时最容易写错位置的关键点每条按“现象→原因→解决”三步记录考前过一遍能少丢不少分。5.1 同构型、异构型与全局控制类型混在一道题里现象看到题干“按局部数据库管理系统的数据模型分类”脑子里跳出“全局控制集中型 DDBS”。原因资料里一上来就是两种分类但分类口径不一样。一个是按局部数据模型分类答案是同构型 DDBS 和异构型 DDBS另一个是按全局控制系统类型分类答案是全局控制集中型 DDBS、全局控制分散型 DDBS、全局控制可变型 DDBS。两组答案样子很像背混了。解决先找题干里的分类依据。“按数据模型分类”永远只有两个空同构/异构“按全局控制系统类型分类”才有三个空集中/分散/可变。我默写时先写口径再填答案不只看答案字面像不像就直接写。5.2 重构条件和重建操作匹配错误现象填空“垂直分片可用什么操作重构全局关系”填成并操作。原因只记了“重构条件”这个术语没有把“水平分片配并、垂直分片配连接”固化下来导致做题时凭直觉写并操作。解决把两张表绑在一起背水平分片是行子集合并重构用 UNION垂直分片是列投影后再拼重构用 JOIN。想不清楚时画一下两个矩形左右拼是连接上下叠是并集。顺便记住不相交条件的差别水平分片完全不相交垂直分片只允许主键重叠。5.3 分布透明性三层次与模式结构四层张冠李戴现象题目问“分布透明性包括哪三个层次”却把全局外层、全局概念层、局部概念层、局部内层写进去。原因资料里透明性和模式结构是相邻的两个考点都带“层次”两个字术语又都是“全局、局部”开头容易串。解决透明性回答“谁被隐藏”分片被隐藏是分片透明性位置被隐藏是位置透明性局部数据模型被隐藏是局部模型透明性。模式结构回答“模式分几层”全局外层、全局概念层、局部概念层、局部内层。按“透明性是应用视角、模式结构是实现视角”区分基本不会再错。5.4 死锁检测和死锁预防两套答案交叉污染现象问“预防死锁的方法”回答集中式、层次式、分布式。原因把检测方法的答案当成预防方法背了。资料里两者紧挨着“方法”这个词又重复出现默写时容易张冠李戴。解决看到“预防”只考虑非占先权、占先权看到“检测”只考虑集中式、层次式、分布式。我把这两组用分隔线划开每次复习先念一遍左边再念右边坚决不混着念。5.5 DATAID-D 的两阶段与四阶段互相干扰现象问 DATAID-D 中分布设计分成哪四个阶段答案写成“分布要求分析、分布设计、分片设计、非冗余分配”。原因DATAID-D 先增加的两个阶段和分布设计内部的四个阶段名称有重叠特别是“分布设计”这个阶段名和分布设计过程名字一样绕得很。解决按层级拆分记忆。第一层DATAID-D 相对 DATAID-1 增加两个阶段是分布要求分析和分布设计。第二层分布设计内部再分成四个阶段依次是分片设计、非冗余分配、冗余分配、局部模式的重新构造。我背的时候给自己提一个问题“分布设计这个大阶段下面还有哪四个小阶段”把层级关系写顺就不会漏。5.6 查询代价公式里的通信代价被写漏现象写查询代价 QC只写了 I/O 代价加 CPU 代价。原因单机查询代价的公式先入为主分布式公式里多了通信代价这一项。少写一项还能撞对两个选项容易产生“差不多对了”的错觉。解决默写公式时带上场景“QC I/O 代价 CPU 代价 通信代价”并补一句话“通信费用和响应时间最短”作为优化准则。这两项在资料里是连续的两道题我每次成对默记写完公式必须跟着写准则。5.7 事务结束原语只记得 Commit 不记得 Rollback现象问分布式事务失败结束的原语只写出 Commit。原因只背了“Begin 开始Commit 结束”这条主线忽略了失败路径也有专门原语。解决把结束动作拆成两条线成功结束用 Commit失败结束用 Rollback 或 Abort。资料原话写的是“Rollback 或 Abort 原语事务失败的结束”注意是“或”不是“和”答题时写出其中一个就算对。所以我每次默写事务结构都会把三个原语全部写一遍不能只写 Commit 收工。5.8 查询类型和查询处理层次互相抢占位置现象问“分布式环境下的查询可分为哪三种类型”回答查询分解、数据本地化、全局优化、局部优化。原因资料把查询类型和处理层次都放在查询章节连续出现且都带“查询”字样看题快时会把两个考点填反。解决类型回答“按数据分布范围分”答案是局部查询、远程查询、全局查询层次回答“处理要经过哪几步”答案是查询分解、数据本地化、全局优化、局部优化。做题前先数题干里的空三个空是类型四个空是处理层次这个数量线索比内容更直接。6. 把答案遮住再自测用抽题脚本把这份资料榨干6.1 用 Python 做考点抽题卡复习 Word 版复习资料的常见做法是把填空答案遮住再默写。我一般会写一个简单的 Python 抽题脚本把资料里的填空原题转成自测列表每次随机抽几道输入答案后自动判分。脚本不复杂重在做题时把“背”变成“测”。# 考点自测随机抽题并比对答案 import random qa [ {q: 分布式数据库系统按数据模型分类分为哪两类, a: [同构型DDBS, 异构型DDBS]}, {q: 数据分片的三种基本方法, a: [水平分片, 垂直分片, 混合分片]}, {q: 分布式查询优化的准则, a: [通信费用和响应时间最短]}, {q: 事务的四个特性, a: [原子性, 一致性, 隔离性, 耐久性]}, ] def normalize(items): # 去掉首尾空格后排序避免答案顺序影响判分 return sorted(x.strip() for x in items) def run_quiz(qa, k3): picks random.sample(qa, kmin(k, len(qa))) score 0 for item in picks: print(item[q]) ans input(你的答案多个答案用 / 分隔).strip().split(/) if normalize(ans) normalize(item[a]): print(正确) score 1 else: print(参考, 、.join(item[a])) print(f得分{score}/{len(picks)}) run_quiz(qa, k3)逻辑说明qa 列表每项是一道填空题键 q 是题干、键 a 是标准答案列表normalize 把用户输入和标准答案都做去空格和排序这样答案顺序不影响判分。参数说明k 是每次抽题数默认 3输入多个答案时用斜杠分隔min(k, len(qa)) 防止抽题数超过题库数量。如果你只想复习某一章把 qa 里对应条目单独抽出来再加一个章节字段就行。6.2 把论述题当成一个小型技术方案去练除了填空抽题我还会把资料里的论述题转成技术方案来验证理解。比如“数据分配有哪些策略、数据分片有哪些策略、分片准则是什么”背完后我会把它包装成一个给订单表做水平分片的设计题先按客户区域定水平分片条件再检查完备性、可重构、不相交三条准则最后说明哪个片段放哪个站点属于分配策略。这么练一遍简答和论述的边界就清楚了。验证方法也很简单合上文档随便抽一道论述题口述三分钟讲不顺的地方就是还没吃透的章节。这些年我有个习惯任何一份复习资料拿过来都会先用脚本抽十道填空过一遍、再口述三道论述题过了才敢说复习完。从那以后每次考前我都会强制走一遍这个流程不光是这份分布式数据库系统的资料其他科目也一样。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。