数据库设计核心考点:事务、并发控制与性能优化全解析

1. 这一章到底在考什么:先看清下半场的牌面

备考系统架构设计师的人都知道,第六章“数据库设计基础知识”是个让人又爱又恨的部分。爱的是它考点相对固定、拿分路径清晰,恨的是内容太碎——尤其是下半部分,事务、并发、恢复、安全、性能优化一股脑涌进来,配合各种概念辨析题和案例题,稍不留神就掉坑里。

说句实在话,如果你只靠啃教材硬背,这一章能把你背到怀疑人生。但如果你把下半部分的逻辑主线理清楚,就会发现它其实就回答了四个问题:数据出错了怎么防、数据乱了怎么纠、数据没了怎么找回来、数据慢了怎么提速。所有知识点几乎都围绕这四条线展开。

这篇文章我按自己的备考经验,把第六章下半部分的重点重新梳理了一遍。不是为了替代教材,而是帮你把教材里分散的知识点串成一张网,搞清楚哪些是真正的高频考点,哪些是案例题里的常见素材,哪些是论文里能用来撑场面的理论工具。内容分四块:事务与并发控制、数据库恢复机制、数据库安全与完整性、性能优化与架构演进。

注意:我写的是下半部分,默认你已经掌握了上篇里的ER模型、关系代数、范式分解、索引基础这些内容。如果你还没看,建议先把那些过一遍,再回来读这篇,否则一些概念衔接会显得跨度有点大。

2. 事务与并发控制:架构师必须讲清楚的第一组硬核概念

2.1 ACID到底在什么场景下会被拿出来问

事务的四个特性——原子性、一致性、隔离性、持久性——几乎是必背内容,但软考不会傻到直接让你默写定义。真正的考法有两种:一种是把四个特性对应到具体实现机制上,另一种是在案例题里给你一个出错的场景,让你反推是哪个特性被破坏了。

我备考时自己整理过一张对应表,效果很好:

事务特性具体含义底层实现机制典型破坏场景
原子性要么全部成功,要么全部回滚日志(Undo Log)执行到一半系统崩溃
一致性事务前后数据满足约束应用逻辑 + 完整性约束违反唯一约束、外键约束
隔离性并发事务互不干扰锁 + MVCC脏读、幻读、不可重复读
持久性提交后数据不丢失日志(Redo Log)宕机后数据丢失

这里最容易被忽略的是“一致性”和另外三个特性的关系。实际上一致性是目的,原子性、隔离性都是手段,持久性是为了保证崩溃后能恢复到处一致的状态。案例题里如果问你“这个设计为什么能保证一致性”,你要能从原子性和隔离性两个角度去回答,而不是只说“它满足ACID”。

2.2 四种隔离级别:考试爱考,项目里更爱考

隔离级别这块,记住一句话:隔离级别越高,并发能力越低,数据一致性越强。四个级别从低到高是读未提交、读已提交、可重复读、串行化。

软考特别喜欢在这里设陷阱,最常见的一种考法是给你一个隔离级别的名称,然后问它分别解决了哪些问题、还会出现哪些问题。所以我自己画了一条记忆链:

  • 读未提交:什么都不防,脏读、不可重复读、幻读全都可能发生;
  • 读已提交:防住了脏读,但同一事务内两次查询可能得到不同结果(不可重复读);
  • 可重复读:防住了脏读和不可重复读,但幻读仍然可能发生;
  • 串行化:全部防住,代价是所有事务串行执行。

但这里要注意一个细节:很多数据库的实际实现和理论定义并不完全一致。比如某主流数据库在可重复读隔离级别下,通过间隙锁把幻读也基本防住了。软考理论题一般按标准SQL隔离级别去考,但案例题如果故意给你一个“项目中使用可重复读是否合理”的讨论,你要能结合具体数据库行为来分析。

2.3 锁机制:读锁写锁、共享锁排他锁,别被名字绕晕

锁这块的核心知识并不复杂:读锁(共享锁)之间可以兼容,读锁和写锁(排他锁)互斥,写锁和写锁也互斥。数据库就用这套规则保证并发事务不会互相踩踏。

难的是两把锁衍生出来的一堆概念组合:表锁、行锁、间隙锁、临键锁、意向锁。软考常考的是“什么情况下会导致死锁”和“如何避免死锁”这类问题。

死锁的四个必要条件——互斥、持有并等待、不可剥夺、循环等待——考试里经常用来做判断。解决方案不外乎以下几种:一次性加锁、按固定顺序加锁、死锁检测后回滚代价最小的事务、锁超时机制。

我自己的项目经验是,互联网业务里死锁最常见的根源有两个:一个是对多个资源加锁的顺序不一致,另一个是事务里夹杂了外部调用(比如在事务里做远程HTTP请求,锁长时间持有没有释放)。后者在考试里不太会直接出现,但在系统设计题里你可以拿出来作为“避免长事务”的论据。

2.4 MVCC:读不阻塞写、写不阻塞读背后的功臣

要理解MVCC(多版本并发控制),我推荐一个生活化类比:图书馆里同一本书有很多副本,读者看的是某个版本,管理员修改时生成一个新副本,大家各看各的,互不干扰。

MVCC的核心思想是写操作不直接覆盖已有数据,而是生成一个新版本,读操作根据自己的事务快照读取对应版本。这套机制配合Undo Log,可以实现无锁的一致性读,性能比单纯用锁高出一大截。

这块考试的考点主要是“MVCC能在哪个隔离级别下实现快照读”。标准答案是读已提交和可重复读。区别在于:读已提交每次查询都生成新的快照,可重复读是事务第一次读取时生成快照并一直沿用。这也就解释了一个经典问题:为什么可重复读能解决不可重复读,却不能完全解决幻读——因为快照固定了,但插入的新版本还是可能在当前读的时候被看到。

2.5 这一节内容在考试里的常见考法和备考建议

事务与并发控制这块,在上午选择题里通常是2到4道,经常结合具体的SQL语句或场景出题。案例分析题里,事务处理经常作为某个子问题出现,比如让你分析一个并发扣减库存的方案是否合理。

我的备考建议是三个动作:第一,把ACID和底层机制对应关系背到滚瓜烂熟,能做到闭着眼睛画出那张对应表;第二,把脏读、不可重复读、幻读各自定义和区别用一句话说出来,拿这个当衡量标准去套各种场景;第三,动手画一画加锁和解锁的顺序图,理解死锁是哪里来的。

实操心得:我复习的时候,每遇到一个并发控制的场景,都会问自己三个问题——这个方案会导致脏读吗?会导致不可重复读吗?会导致幻读吗?把这三个问题过一遍,比做十道选择题都管用。

3. 数据库恢复机制:崩溃了怎么办,这是架构师的基本盘

3.1 日志先写还是数据先写:Redo Log和Undo Log的分工逻辑

数据库恢复机制里最核心的一条原则叫“先写日志”(Write-Ahead Logging),简称WAL。规则很简单:在数据页真正落盘之前,必须先把对应的日志记录写进日志文件。这样做的原因也很直接——如果数据页没写成功系统就崩了,日志里还有完整的操作记录,可以重放(Redo)恢复;如果数据页和日志都写了一半,可以用Undo回滚未提交的事务。

我备考时喜欢用记账来理解:WAL相当于你每次花钱先记到账本上,再付现金。就算现金丢了,账本还能证明你花过这笔钱。要是先付钱后记账,账本丢了就说不清楚了。

软考对这块的考法一般有两种:一种是给你一个崩溃时间点,让你判断系统重启后会重做哪些操作、回滚哪些操作;另一种是直接问为什么先写日志。应付这两种考法,你要掌握一条判断原则——提交了的事务必须重做,未提交的事务必须回滚。

3.2 检查点技术:恢复不是从头刷日志,而是从检查点开始刷

如果数据库动不动就崩溃,恢复时把全部日志从头重放一遍显然不现实。检查点(Checkpoint)就是为了解决“从哪个位置开始恢复”的问题。

检查点的机制是这样的:系统每隔一段时间,或者按某种触发条件,把内存中已修改的数据页强制刷到磁盘,然后记录一个检查点位置。此后如果发生崩溃,恢复只需要从最近一次检查点开始,之前的日志和数据页都可以认为已经落盘。

考试喜欢考检查点的好处:缩短恢复时间。我在做案例分析练习时遇到过一道题,问的是“我们说系统使用了检查点,为什么崩溃恢复仍然要扫描日志到末尾”。答案是:检查点能缩短恢复起点到崩溃点之间的日志长度,但崩溃点之后的日志仍然要完整扫描,因为那部分可能包含了未刷盘但已提交的事务操作。能把这个逻辑讲清楚,阅卷老师一般都会给你分。

3.3 备份策略:全量备份、增量备份、差异备份怎么选

备份策略这块,因为贴近实际工程,所以选择题和案例题都很喜欢出。最容易被绕晕的是增量备份和差异备份的区别。

先说定义:增量备份是备份上一次任何类型备份之后发生变化的数据;差异备份是备份上一次全量备份之后发生变化的数据。

它们最大的差别在于恢复时需要合并的备份集数量:增量备份链恢复时,要按顺序把全量、第一个增量、第二个增量……全部叠起来,中间任何一个坏了,整条链就断了;差异备份恢复时只需要拿最新一次全量加上最近一次差异,两步搞定。代价是差异备份占用的空间和时间比增量备份多。

我自己的经验建议是:核心业务系统用“全量+差异”的组合,恢复速度优先;数据量巨大且备份窗口紧张的辅助系统,用“全量+增量”;无论哪种策略,一定要定期做恢复演练,不能只备份不验证。这个话软考不会直接考,但论文写作和案例题里提到容灾设计时是一个非常亮眼的细节。

3.4 容灾方案里的几个高频术语:RTO、RPO、数据镜像

RTO(恢复时间目标)和RPO(恢复点目标)在教程里一般是放在高可用章节详细展开,但数据库恢复部分也会用到。简单地说:RPO是你能容忍丢失多少数据,RTO是你能容忍宕机多长时间。

在线考试里容易混淆的是“主备复制”和“同步复制”的RPO差别:异步复制在主库崩了以后,备库可能缺最后一段日志,RPO不为零;同步复制保证备库和主库数据完全一致,RPO为零,但事务延迟会变高。选哪个方案,本质上是在性能和一致性之间做权衡。

如果你论文里要写数据库高可用设计,可以把“RPO为0约等于同步复制+共享存储”这种结论用上,再补一句“RPO不为0也不一定就不可接受,关键看业务容忍度”——这种辩证说法在阅卷时比照搬教材更容易获得认可。

3.5 恢复机制在备考时的复习策略

恢复机制是上午题和案例分析题都偏爱的方向,尤其是WAL和检查点结合出现时,题目通常不大难,但文字表述比较绕。我备考时采取的办法是反复画时间线图——把事务的开始、提交、数据页刷盘、日志落盘、检查点、崩溃点全部画到一个时间轴上,然后反复对比不同节点发生崩溃时的恢复结果。

画过几次之后你就会发现,答案完全由事务提交状态和日志落盘位置决定,跟数据的实际写入顺序无关。这个“无关”的感觉建立起来以后,做这类题基本不会再错。

4. 数据库安全与完整性:不能只会建表,还得知道怎么防得住

4.1 用户权限管理:最小权限原则不是一句空话

数据库安全部分,最基础也最容易考到的内容是用户权限管理。SQL标准里的授权语句是GRANT和REVOKE,这也是考试常客。

但只背语句还不够,案例题里经常给你一个场景:某应用系统为了让开发人员方便排查问题,把数据库账号直接给了生产库的最高权限。问题就问你这个设计有什么风险,如何改进。答案要点基本围绕“最小权限原则”展开:开发人员只需要只读权限,或者只能访问脱敏库,生产环境的DDL操作应该走审批流程。

这块我在实际项目里见过太多次翻车了。一个账号权限太大,一条误操作SQL可能让整张核心表的数据被清掉。所以每次写系统设计文档,我都会把数据库账号权限矩阵单独画一张表,分出账号类别、可访问库、可执行操作、认证方式、审批流程五个字段,既清晰又规范,考试案例题也能用这张表当答题框架。

4.2 视图带来的安全红利:逻辑屏蔽比物理隔离更常用

视图在数据库安全里的作用经常被忽略。教材在讲视图时通常侧重“简化查询”和“逻辑独立性”,但软考还会从安全角度提问:如何让某个用户只能看到一张表里的一部分列?

答案就是用视图。把需要的列做进一个视图,然后把查询权限授予视图而不是基表。这样用户根本接触不到基表,也就谈不上看到不该看的列。这个技巧在很多系统的报表模块里非常常见,我也在多个项目里靠它解决了敏感字段暴露的问题,效果立竿见影。

4.3 数据加密:传输层和存储层要分开考虑

数据库加密这块,考试主要集中在两个层面:透明数据加密(TDE)和传输加密。

透明数据加密是数据库层面的功能,数据写入磁盘时自动加密,读取时自动解密,对应用层完全透明。它的价值在于:即使磁盘被拖走,没有密钥也读不出内容。传输加密则是客户端和服务器之间走加密协议(比如SSL/TLS),防止数据在链路上被截获。

软考可能会问你“加密对性能的影响主要在哪”。答案要点有两个:一是加密解密会消耗CPU资源,二是加密后的数据可能影响索引效率。很多系统为了性能选择只对核心敏感字段做加密,同时用“加密列+原文检索分离”的思路来缓解索引失效问题。这种妥协思路在案例题里属于加分项。

4.4 完整性约束:实体完整性、参照完整性、用户定义完整性

数据库完整性这块是典型的死记硬背送分题,但正因为送分,很多人容易丢分,因为概念之间的边界容易混淆。

实体完整性面向的是表内的主键约束,保证每一行可以被唯一识别,主要通过主键和唯一性约束实现。参照完整性面向的是表与表之间的外键约束,保证外键值在参照表里一定存在。用户定义完整性则是业务规则层面的约束,比如非空、取值范围、年龄不能为负这类。

考试里常考的一个理解陷阱是:外键约束和触发器都能实现完整性控制,两者的区别是什么。标准回答:外键约束是声明式的,由数据库引擎自动检查,简单高效,但业务规则复杂时表达能力不足;触发器的表达能力强,可以写任意复杂的校验逻辑,但性能有损耗,调试也更困难。放在案例题里,一般推荐优先用约束,约束表达不了的才上触发器。

4.5 审计与合规:考试里容易被当成送分点的地方

很多人复习数据库安全时会主动跳过审计,觉得就是记录日志,没什么技术含量。但软考选择题其实非常喜欢在这一块出概念题,比如问“审计日志应该记录哪些内容”或者“审计功能对系统性能有什么影响”。

正确的备考姿势是记住审计的三要素:谁(用户)、做了什么(操作类型和对象)、什么时候(时间戳)。再补一个“审计为什么会影响性能——因为所有操作都要额外写审计日志,IO和存储开销都会上升”。这两句话就能应付大部分审计相关的题目。

5. 性能优化与索引调优:理解了原理,才知道什么时候该骂慢查询

5.1 索引失效的常见场景:EqualTo函数、隐式转换、违反最左匹配

索引是第六章后半部分的重头戏,而索引部分最常出现的就是“为什么SQL没走索引”这类问题。软考很喜欢出一个小SQL,让你判断它是否使用索引以及为什么。

我把常见的索引失效场景整理成了一张自查清单:

  • 对索引列使用了函数(比如WHERE DATE(create_time) = '2024-01-01'而不是范围查询);
  • 索引列发生了隐式类型转换(比如字符串索引列和数字比较,或者在查询条件里写WHERE name = 123,name是varchar);
  • 联合索引不满足最左前缀原则,比如索引是(a,b),条件是WHERE b = ?,短路了;
  • 使用LIKE '%keyword'这种前缀模糊匹配,索引无法定位;
  • 用OR连接的条件里有一条覆盖列没有索引,优化器可能放弃索引。

这些场景在上午的选择题里几乎每年都会出现一两种,属于背下来就能拿分的那类知识点。但只背失效场景还不够,你还要能说出“为什么失效”的原理——B+树索引是有序排列的,条件要对有序性友好,函数和隐式转换破坏了值本身的可比性,前缀模糊匹配则没法利用有序性做范围定位。

5.2 执行计划:EXPLAIN输出的几个关键列要看懂

虽然软考不会让你真的去操作一个数据库,但案例分析题里经常给一段执行计划截图或文字描述,问你瓶颈在哪里。

执行计划里通常关注这几个要素:访问类型(ALL、INDEX、RANGE、REF、EQ_REF、CONST之类)、扫描行数(rows)、是否使用了临时表和文件排序(Using temporary、Using filesort)、以及命中的索引名。

我在复习时的策略是,把每个访问类型从差到好排序:ALL全表扫描最差,INDEX会扫索引树,RANGE是索引范围扫描,REF是非唯一索引等值匹配,EQ_REF是唯一索引匹配,CONST是主键或唯一索引的常量匹配。看到ALL和超大rows值,基本就可以判断这条SQL该优化了。

这个知识最妙的地方是它不仅服务于考试,实际项目里的慢SQL排查也是一模一样的流程——先拿真实SQL跑一次EXPLAIN,看访问类型和rows,再决定是加索引、改写SQL还是拆表拆库。

5.3 覆盖索引和回表:看起来不起眼,优化效果很惊人

覆盖索引这个概念常被忽略,但在案例题里特别值钱。它的定义是:一个索引中包含查询所需要的全部列,查询时不需要回表访问数据行,直接通过索引就拿到结果。

我举个例子方便理解:有一张用户表,有name和age两个字段,你建了一个联合索引(name, age),然后执行SELECT name, age FROM users WHERE name = ...。因为联合索引里已经有了name和age的值,查询时只扫索引树就行,不需要根据主键再回去查数据行,这就是覆盖索引。

软考问你“如何优化一条频繁执行的简单查询”时,覆盖索引是一个非常标准且稳妥的答案。比它更复杂一点的调优手段还有“索引条件下推”,但只写覆盖索引已经能拿到主要分数。实战中我遇到过一些慢查询,加一个覆盖索引后从几百毫秒降到几毫秒,效果就是这么明显。

5.4 缓存与连接池:性能优化不只是索引这点事

数据库性能优化如果只盯着索引,那视野就窄了。软考案例题里经常结合“系统卡顿”现象,让你给出综合性的优化建议。我总结出一个标准答题组合,可以应对大部分此类题目:

  • 数据库连接池调优:合理设置最大连接数、最小空闲连接数和连接超时时间,避免连接反复建立和销毁;
  • 缓存层引入:对热点数据加缓存(比如Redis),减少数据库压力;
  • 索引优化:覆盖高频查询条件,消除慢SQL;
  • 读写分离:主库承担写事务,从库承担读流量;
  • 定期归档:把过期冷数据移到归档表或历史库,降低表数据量和索引深度。

如果你能在答案里体现“先定位瓶颈,再针对瓶颈设计优化方案”的思路,哪怕是按照上面几个方向展开,分也不会低。实际工作中也是一样,不能别人说加缓存就加缓存,先看慢日志和监控指标,把所有备选方案排个优先级,再动手。

6. 从单机到分布式:数据库设计知识的延伸方向

6.1 读写分离、分库分表、分区表:概念必须掰清楚

这一块属于第六章内容向系统架构设计部分过渡的地带,也经常是案例分析的压轴题材。很多人把分区、分表、分库混为一谈,其实它们是三个不同层次的手段。

分区表解决的是单表数据量过大时的“物理存储拆分”问题,逻辑上还是一张表,存储引擎把数据按分区规则放到不同文件里,对应用完全透明。分表解决的是“单表行数过多导致索引维护和查询性能下降”的问题,逻辑上拆成多张结构相同的表,需要应用层或中间件做路由。分库解决的是“单库连接数、IO和存储到达瓶颈”的问题,把不同业务表放到不同物理库实例上,甚至不同机器上。

考试如果问你三者的适用场景和边界,你就按这个逻辑答:单表数据量大用分区,表行数多且写入活跃用分表,实例能力到顶用分库。注意写清楚“分区表对应用透明,分表需要路由逻辑,分库涉及分布式事务”——这三句话拿出去就能镇住一大半同类题。

6.2 垂直拆分和水平拆分的决策逻辑

分库分表的两种基本拆法是垂直拆分和水平拆分。垂直拆分是把一张宽表按列的归属拆成多张表,或者把不同业务的表分开放到不同库;水平拆分是把一张表的行按某种分片键散列到多张表/多个库里。

考试常问“一个系统什么情况下应该先用垂直拆分”。标准决策逻辑是:优先以业务边界划分垂直拆分,让每个微服务独享自己的数据库;垂直拆分之后单表数据量仍然巨大,再考虑水平拆分。实操经验告诉我,不要在项目一开始就上水平拆分,那会带来分布式ID、跨库join、分布式事务、跨分片分页等一系列复杂度,业务没验证到位之前,垂直拆分往往已经能解决大部分问题。

6.3 分片键选错了会发生什么

水平拆分的路上最致命的坑是分片键选错。如果分片键选的是低基数字段(比如性别只有男和女两种情况),数据会被不均匀地砸到两个分片,其他分片空闲,热点全在个别分片,等于没拆分。

软考里的典型问法是“某系统按用户ID做分片,但也存在极少量大客户,查询大客户数据时怎么优化”。最朴素的答案是“分片键+查询条件的矛盾无法完全消除,只能在分片基础上加一层汇总表或缓存”。我在实际项目里也这么干过,效果还不错。这种“承认技术局限,用工程方案弥补”的思路,恰恰是架构师考试最想看到的能力。

如果你写论文,可以把分片键的选型过程写进去,从数据分布均匀、查询亲和性、写入扩展性三个角度分析,评委一般都会认可。

6.4 分布式事务:从两阶段提交到最终一致性

数据库从单机走向分布式之后,事务就变成了一个更复杂的话题。软考大纲里没有单独拿出一章讲分布式事务,但案例分析题时不时会涉及,所以第六章后半部分应该提前打好底子。

两阶段提交协议是最经典的分布式事务协议,分为准备阶段和提交阶段。准备阶段所有参与节点执行事务并写Undo/Redo,但先不提交,等都回复“准备好了”,协调者再发提交指令。这个协议能保证所有节点同时提交或同时回滚,但存在协调者单点问题和阻塞问题。

更务实的话题是最终一致性,典型实现是本地消息表、事务消息、Saga模式。考试一般不会让你深挖某个框架的实现细节,但会让你判断一个业务场景应该用强一致还是最终一致,并说明理由。答题原则很简单:涉及资金、库存、订单状态的强一致场景用分布式事务框架;允许短暂不一致、后续可对账纠正的场景用最终一致性方案。

7. 常见混淆点与复习建议:这些坑我踩过,你就别踩了

7.1 高频易混淆概念速查表

为了让大家复习时不走弯路,我把自己踩过坑、也容易在考试里出现的高频混淆点整理成一张表,建议直接截图保存:

易混淆组核心区别
共享锁/排他锁共享锁之间兼容,排他锁与任何锁都冲突
不可重复读/幻读前者是同一行内容变了,后者是出现了新行
全量+增量/全量+差异增量链恢复步骤多,差异恢复只需两步
RPO/RTORPO丢多少,RTO停多久
分库/分表/分区分库是实例级拆分,分表是表结构拆分,分区是存储拆分
垂直拆分/水平拆分按列拆vs按行拆
Redo/UndoRedo重做已提交,Undo回滚未提交
表锁/行锁表锁粒度大开销小并发差,行锁粒度小开销大并发好

7.2 备考时间分配与做题策略

第六章下半部分的知识密度很大,但好在规律性强。我给自己的时间分配是:并发控制30%,恢复机制20%,安全和完整性20%,索引优化20%,分布式延伸10%。

做题策略上,上午题以概念辨析为主,遇到拿不准的选项,优先排除绝对化表述——比如“只要加了索引查询就一定能变快”“完全避免死锁的方法是提高隔离级别”这种话基本都是错的。案例分析题则要注意踩点给分,宁可多写几个优化方向,也不要只围绕一个方向长篇大论。

7.3 论文写作怎么用上这一章的内容

软考架构师论文里,数据库设计相关的题目出现频率很高。如果你抽到了“论信息系统的数据架构设计”“论高并发系统数据库设计”这类题目,第六章下半部分的内容就是你论文的技术骨架。

我的建议是提前准备好一个自己熟悉的模拟项目,把事务隔离级别选型、分库分表方案、缓存与数据库一致性策略、容灾备份方案四个模块写熟。考试时不管题目怎么变,你都往这四个模块上靠,再将它们串成一个完整的数据库架构设计故事,效果会远比临场编一个系统要扎实。

写在最后的一点个人心得

第六章数据库设计基础知识,在整个软考架构师的知识体系里属于那种“投入产出比极高”的章节。它不像一些纯记忆性内容,背完就忘,也不像纯逻辑推理性内容,需要大量刷题。它的核心魅力在于:把这些知识学透了,你是真的能在日常系统设计里用上的。

建议复习的时候别只停留在背定义。每学一个概念,就试着想一想:如果我的系统里出现这个问题,我会怎么处理?会遇到什么坑?这样带着场景去学,知识才不是悬浮在半空的理论,而是长在你手上的能力。

我备考时最大的感受是,数据库设计不是静态的——从单机事务到分布式事务,从普通索引到分库分表,它一直在处理“数据量变大之后怎么办”这个问题。第六章下半部分,正是这个“变大之后怎么办”的思维训练场。把这部分吃透,后面学架构设计、系统可靠性的时候,你会发现很多东西都是相通的,前进的路会顺畅很多。

相关新闻

AI图像生成五大模型对比:FLUX.2、Seedream、Z-image、Qwen-Image、GLM-Image选型指南

AI图像生成五大模型对比:FLUX.2、Seedream、Z-image、Qwen-Image、GLM-Image选型指南

近几年AI图像生成领域的竞争格局,可以说“月月都在刷新”。前两年大家还在讨论“AI能不能画出手”,现在话题早已升级成“谁的提示词理解更准、谁的风格控制更稳、谁的API更适合作业系统”。这次我想把目前讨论度最高的五个模型——FLUX.2、Seedream&…

2026/10/19 17:40:46 阅读更多 →
Spring Boot+MySQL员工信息管理系统:从数据库设计到部署避坑全指南

Spring Boot+MySQL员工信息管理系统:从数据库设计到部署避坑全指南

由于员工信息管理系统是计算机类毕业设计中出现频率最高的一类选题,很多同学拿到题目之后第一反应是“功能太简单、没啥可写”,但真正动手之后才发现处处是坑:框架版本不兼容、Mapper扫描不到、JSON序列化死循环、部署到服务器之后数据库连不…

2026/10/19 17:40:46 阅读更多 →
YOLO26轻量化优化:DualConv双卷积替换主干,mAP涨1.3且参数降27%

YOLO26轻量化优化:DualConv双卷积替换主干,mAP涨1.3且参数降27%

跑完新一轮YOLO26优化实验,我先把结论扔到前面:用轻量化双卷积DualConv替换掉主干网络里一部分标准卷积之后,模型mAP50-95涨了1.3个点,同时参数量从12.9M掉到9.4M,计算量从18.7G降到12.3G。这不是靠蒸馏,也…

2026/10/19 17:39:45 阅读更多 →

最新新闻

基于iRTU和Air8000A的RS485环境监测系统:从协议栈开发到配置化上云

基于iRTU和Air8000A的RS485环境监测系统:从协议栈开发到配置化上云

做物联网数据采集最头疼的不是传感器选型,而是如何把数据稳定、可靠地传到云端。前段时间我把一套环境监测系统从“单片机裸跑串口转发”的旧路子,迁移到基于iRTU固件AirUI界面Air8000A硬件485传感器这套组合上,总算体会到什么叫“配置比写代…

2026/10/19 19:15:14 阅读更多 →
ACPI电源按钮S3唤醒到S0完整流程图解与排查指南

ACPI电源按钮S3唤醒到S0完整流程图解与排查指南

做底层固件和驱动调试的人,总有一天会被ACPI的睡眠唤醒折磨:笔记本明明进了S3,按下电源按钮却毫无反应,或者屏幕亮了但系统卡在半路,又或者唤醒后USB设备全部掉线。这些问题表面上都是“电源按钮”和“S3/S0切换”的锅…

2026/10/19 19:15:14 阅读更多 →
CNN猫狗分类实战:TensorFlow+Keras从数据到模型调参全解析

CNN猫狗分类实战:TensorFlow+Keras从数据到模型调参全解析

猫狗分类这个项目,我从 TensorFlow 和 Keras 入手做过不止一遍,每次带新人入门,也都拿它当第一块练手砖。它看着简单——不就是区分一张图里是猫还是狗吗,但真把数据预处理、卷积特征提取、训练调参这些环节走一遍,你对…

2026/10/19 19:15:14 阅读更多 →
从零搭建代码评审工具链:open-code-review 实践与踩坑

从零搭建代码评审工具链:open-code-review 实践与踩坑

1. 从零搭建一套代码评审工具链,我为什么盯上了 open-code-review第一次听到 open-code-review 这个词,是在一个做后端的朋友群里。有人吐槽说团队里代码评审全靠人肉盯,PR 一多就漏,评审意见散落在各种聊天记录里,过两…

2026/10/19 19:14:12 阅读更多 →
从零搭建 open-code-review 流程:自动化检查与评审人分配实战

从零搭建 open-code-review 流程:自动化检查与评审人分配实战

1. 为什么我要自己搭一套 open-code-review 流程第一次听到“open-code-review”这个词,很多人会以为它只是某个开源项目的名字。实际上,它更像是一类工程实践的统称:把代码评审这件事从“闭门会议”变成“开放、可追溯、可自动化”的流程。我…

2026/10/19 19:14:12 阅读更多 →
pandas数据合并全解析:merge、join、concat一文搞懂

pandas数据合并全解析:merge、join、concat一文搞懂

搞数据分析的兄弟,pandas 用久了,merge、join、concat 这三兄弟的分工你搞明白了吗?坦白说,我见过不少入门一两年的朋友,仍然在这三个方法之间来回试。逻辑上用对了,数据量小的时候无感,顶多多跑…

2026/10/19 19:13:10 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →