本文目录
上级:后端学习 from zero
1. 业务驱动
技术上的「高效」必须服从业务需求。
实践上要先和利益相关者沟通,确保模型和业务目标一致;再通过用例分析识别最常见的查询和报告需求,以此反推数据结构。
2. 概念建模与 ERD
在深入物理实现前,先构建抽象的、人机可读的逻辑框架。
ERD 用来可视化数据实体、属性和它们之间的关系。如果某个业务逻辑过于复杂,应该考虑拆成独立子模型。
3. 规范化
目标是减少冗余,保证数据完整性。
- 1NF:确保列的原子性,消除重复组。
- 2NF:消除对部分主键的依赖。
- 3NF:消除传递依赖,非主键字段之间不能互相依赖。
工程上通常掌握到 3NF,并学会适度反范式就足够。
4. 反规范化
反规范化是空间换时间,为查询性能引入冗余。
典型场景是过多 JOIN 导致性能瓶颈。但它会增加维护难度和数据不一致风险,所以必须有选择地使用。
5. 索引优化
索引提升检索速度,但会增加写入成本。
重点不是死记 B+ Tree,而是知道:
- 什么样的 SQL 能命中索引。
- 为什么范围查询会影响后续索引列。
- 哪些列经常出现在
WHERE、JOIN、ORDER BY中。 - 什么时候需要复合索引。
6. 面向扩展的设计
当数据量增长时,需要考虑:
- 水平切分:按行把数据分布到不同服务器或服务中。
- 垂直切分:按列拆分大表,分离高频和低频访问字段。
7. 数据完整性与质量
数据库是数据质量的最后一道防线。
实践包括:
- 使用主键、外键、唯一约束、Check 约束。
- 使用事务保证一组操作全成功或全失败。
- 设计时预判插入、删除、更新异常。
8. 文档化与版本控制
好的模型需要能被他人理解和维护。
- 维护 ERD。
- 建立数据字典。
- 把 schema 变更纳入版本管理。
- 使用 Flyway、Liquibase 等 migration 工具。
9. 持续迭代
建模不是一劳永逸。需要定期监控性能,收集开发人员和用户反馈,随着业务进化重构模型。
一句话总结:
先做对:规范化、业务对齐;再做快:索引、反规范化、切分;最后做好:文档、监控、持续重构。
后端还需要关注什么
比深钻数据库更有价值的后端主题:
- 异步处理与消息队列:RabbitMQ、Kafka、可靠消息、幂等、最终一致性。
- 缓存策略与并发控制:Redis、缓存穿透、击穿、雪崩、分布式锁。
- DDD 与架构模式:根据业务逻辑拆分表和类,而不是根据表机械写类。
- 并发编程模型:线程池、虚拟线程、Goroutine、Channel、Event Loop。
- 安全性:OWASP Top 10、SQL 注入、越权、JWT、OAuth2。
- 可观测性:日志、链路追踪、指标监控。