软考高级系统架构设计师备考(十九):数据库系统---数据库设计
在软考高级系统架构设计师考试中,数据库不仅考基础理论,还重点考察工程实践能力与架构设计能力 。本篇聚焦高阶考点,常见于案例分析题与架构设计题。
核心内容包括:
-
数据库索引
-
数据库视图
-
分库分表与分区
-
反规范化设计
-
分布式数据库系统
-
NoSQL数据库
-
大数据技术体系
一、数据库索引
1 索引的作用
索引(Index)用于提高查询效率,本质是数据结构(如B+树)。
类比:
索引 ≈ 书的目录
2 常见索引类型
(1)按结构分类
-
B+树索引(最常用)
-
哈希索引
-
位图索引
(2)按功能分类
-
主键索引
-
唯一索引
-
普通索引
-
联合索引(复合索引)
3 B+树索引特点
-
所有数据在叶子节点
-
叶子节点有序链表
-
支持范围查询
4 索引失效场景
常见导致索引失效的情况:
-
使用函数:
WHERE YEAR(date)=2025 -
模糊查询:
LIKE '%abc' -
隐式类型转换
-
违反最左前缀原则(联合索引)
例题
以下哪种情况最可能使用索引:
A. LIKE '%abc' B. WHERE id = 10 C. WHERE YEAR(date)=2025 D. WHERE name LIKE '%张%'
答案:B
二、数据库视图
1 视图定义
视图(View)是虚拟表,基于查询结果生成。
CREATE VIEW v_student AS
SELECT name FROM Student;
2 视图特点
-
不存储数据(一般)
-
提高安全性
-
简化复杂查询
3 视图更新限制
视图可更新需满足:
-
单表
-
无聚合函数
-
无分组(GROUP BY)
例题
视图的本质是:
A. 存储数据 B. 虚拟表 C. 索引结构 D. 缓存数据
答案:B
三、分库、分表、分区
1 为什么要拆分?
原因:
-
数据量过大
-
并发压力高
-
单机瓶颈
2 分表(水平拆分)
将数据按规则拆到多个表:
User_1, User_2, User_3
规则:
-
按ID取模
-
按时间分表
3 分库
将数据分布到不同数据库:
DB1, DB2, DB3
4 分区(Partition)
数据库内部逻辑划分:
-
范围分区
-
哈希分区
-
列表分区
对比总结
| 技术 | 是否跨库 | 透明性 |
|---|---|---|
| 分区 | 否 | 对应用透明 |
| 分表 | 可能 | 部分透明 |
| 分库 | 是 | 不透明 |
例题
将用户表按用户ID取模拆分到多个表,属于:
A. 垂直分表 B. 水平分表 C. 分区 D. 反规范化
答案:B
四、反规范化(设计权衡)
1 什么是反规范化
为了提高性能,故意增加冗余。
2 常见手段
-
冗余字段
-
冗余表
-
预计算字段
3 优缺点
优点:
-
查询快
-
减少JOIN
缺点:
-
数据不一致风险
-
更新复杂
例题
为了减少JOIN,将用户姓名冗余到订单表,这属于:
A. 规范化 B. 反规范化 C. 分区 D. 索引优化
答案:B
五、分布式数据库系统
1 定义
数据分布在多个节点,通过网络协同工作。
2 关键特性
-
数据分片(Sharding)
-
复制(Replication)
-
一致性控制
3 CAP理论
分布式系统三大特性:
-
C(Consistency)一致性
-
A(Availability)可用性
-
P(Partition Tolerance)分区容错
结论:
三者不可兼得,只能选两个
4 常见架构
-
主从复制
-
多主架构
-
分布式事务(2PC、3PC)
例题
在网络分区情况下必须保证的特性是:
A. 一致性 B. 可用性 C. 分区容错性 D. 安全性
答案:C
六、NoSQL数据库
1 特点
-
非关系型
-
高扩展性
-
高性能
-
灵活结构
2 分类
(1)键值型
如:Redis
(2)文档型
如:MongoDB
(3)列族型
如:HBase
(4)图数据库
如:Neo4j
3 与关系数据库对比
| 项目 | 关系型 | NoSQL |
|---|---|---|
| 结构 | 固定 | 灵活 |
| 扩展 | 较难 | 容易 |
| 事务 | 强 | 弱 |
例题
适合存储JSON数据的是:
A. MySQL B. MongoDB C. Oracle D. DB2
答案:B
七、大数据技术
1 核心特点
-
数据量大(Volume)
-
速度快(Velocity)
-
类型多(Variety)
-
价值密度低(Value)
2 典型技术栈
(1)存储
- HDFS
(2)计算
-
MapReduce
-
Spark
3 处理模式
-
批处理
-
流处理
例题
用于大规模分布式存储的是:
A. MySQL B. HDFS C. Redis D. Oracle
答案:B
八、综合案例分析
题目
某电商系统:
-
用户数据量巨大
-
订单查询频繁
-
需要高并发支持
问:应采用哪些技术?
分析
-
用户表 → 分库分表
-
订单查询 → 建索引
-
热数据 → 缓存(Redis)
-
历史数据 → 数据仓库
答案要点
-
水平分表
-
索引优化
-
缓存 + NoSQL
-
数据仓库分析
九、总结
数据库进阶重点如下:
索引:
-
B+树
-
索引失效
视图:
-
虚拟表
-
安全性
架构:
-
分库分表
-
分区
设计:
- 反规范化
分布式:
-
CAP理论
-
分布式事务
新技术:
-
NoSQL
-
大数据