第5章 数据设计
1. 数据设计概述
(1) 数据设计的步骤
- 业务分析:充分了解业务相关的数据需求 => 第2章 需求分析流程
- 概念数据建模:构建领域模型以描述现实世界中的概念化结构 => 第3章 用例建模法的4个实施步骤
- 逻辑数据建模:对领域模型中的实体、关系进行扩展和细化,形成解决方案视角的模型(如类图) => 第4章 详细设计
- 物理数据建模:解决逻辑数据模型针对不同类型数据库的物理化以及性能等具体的技术问题
- 概念数据模型、逻辑数据模型和物理数据模型之间的关系 (图5-2):
3. 常用数据库及其适用场景
在不同的应用场景下,工程师需要针对不同的数据类型和不同的数据访问特点,选择合适的数据存储系统。
4. 存储架构演进
(1) 单机模式:数据库服务和业务服务混合部署在一台主机上
(2) 独立机器:数据库服务单独部署在一台主机上
(3) 读写分离:
- 写主库、读备库,主备库之间通过主备复制同步数据。读库无状态可横向扩展。
- 写库同步读库会有时延,无法保障数据强一致性。
(4) 垂直拆分
-
垂直分库:将同一个数据库中的多张表拆分到多个数据库中,并部署在不同的物理机上。
- 拆分后无法执行联表操作,需要在应用层解决。
-
垂直分表:将同一张表的多个字段拆分到多个表中(冷热分离)。
(5) 水平拆分
-
水平分库:将同一个表中的数据平均拆到多个数据库中
- 需要根据业务场景确定分表字段(sharding_key)
- 采用数据库中间件来实现路由规则匹配与计算、SQL解释、查询结果聚合等逻辑
-
水平分表:将同一个表中的数据平均拆分到多个表中,拆分后的表仍存储在同一个数据库中。
分库后每个库部署在不同主机上,分表后所有表都部署在一台主机上。 为什么分表能解决问题?降低索引树高度、降低磁盘寻道时间、提高缓存命中率、降低长事务锁表影响 => 提升局部性 数据库拆分决策中,优先垂直分库、其次水平分表、最后水平分库
5. 物理数据表设计
(1) 设计规范
- MySQL有InnoDB和MyISAM两种可选引擎,MyISAM速度快,但不支持事务、外键和行级锁;InnoDB速度稍逊一筹,但支持事务、外键、行级锁等高级功能。