1. 数据备份与恢复策略 (权衡的艺术)
“海量数据面前,每天全量备份是不现实的。核心在于时间和空间的取舍。”
| 备份类型 |
备份内容 |
恢复速度 |
空间占用 |
| 完全备份 (Full) |
备份整个数据库 |
最快 (只需这一个包) |
最大 |
| 增量备份 (Incremental) |
仅备份上一次备份后发生变化的数据 |
最慢 (需要全备 + 沿途所有增备包) |
最小 |
| 差异备份 (Differential) |
备份上一次完全备份后发生变化的所有数据 |
中等 (全备 + 最新的一个差备包) |
中等 |
经典真题演练
场景:系统周日进行完全备份,周一至周六每天进行差异备份。如果在周四上午硬盘损坏,管理员应如何加载备份进行恢复?
答案:加载周日的完全备份,以及周三的差异备份。
解析:差异备份的特点是“打包自上次全备以来的所有变化”。因此周三凌晨的差异包已经包含了周一、周二、周三的所有数据变动。恢复时只需首尾相加,不需要中间的过渡包。
2. 分布式数据库体系
“分布式数据库的最高境界:让用户感觉不到它是分布式的,就像在用单机一样(透明性)。”
四大透明性 (由高到低)
- 分片透明性 (Fragmentation):最高级别。用户不需要知道数据是如何被“切碎”的。
- 位置透明性 (Location):用户不需要知道数据存在哪个城市的机房(物理位置)。
- 局部数据模型透明性:用户不需要知道局部场地使用的是什么数据模型(关系型还是网状等)。
表的分片方式 (数据怎么切碎)
水平分片 (按“行”切)
以元组(行)为单位进行划分。例如:将北京客户的整行数据放 A 机房,广州客户的放 B 机房。
垂直分片 (按“列”切)
以属性(列)为单位进行划分。例如:将用户的“基本信息”放一处,“隐私信息”放另一处。(注意:切开的每一块必须都包含主键,以便日后连接还原)。
考场直觉判断
题:用户编写程序时,不需要知道某张表的数据到底是“按行切”存在了多台服务器上,还是“按列切”存在了多台服务器上,这属于什么透明性?
答案:分片透明性。
解析:只要题干中强调了对“切割规则(按行/按列)”的隐藏,就是考分片透明性。如果题干强调的是“不知道在哪个服务器”,则是考位置透明性。
3. NoSQL 非关系型数据库选型
“传统关系型数据库在海量高并发面前显得笨重,NoSQL 牺牲了部分严谨性,换来了极致的速度和灵活性。”
- 键值对 (Key-Value) 数据库 🗝️:
- 代表: Redis
- 特点: 数据存在内存中,速度极快;结构像查字典一样简单。
- 场景: 双 11 秒杀、热点新闻缓存、排行榜。
- 文档型 (Document) 数据库 📄:
- 代表: MongoDB
- 特点: 数据存为类似 JSON 的格式,不需要固定的表格结构,每一行拥有的字段可以完全不同。
- 场景: 结构多变的海量数据,如博客文章、短视频评论、用户行为日志。
💡 架构师实战抉择:
如果要开发一个大型内容社区,帖子内容长短不一,且后期极有可能频繁增加新字段(如打赏数、点赞列表)。
选型建议:首选 MongoDB。因为它是文档型数据库,格式自由,完美契合“海量且结构不固定”的业务需求,无需像 MySQL
那样痛苦地修改表结构(ALTER TABLE)。