35dc950e4f
- ADR-001: 单体应用架构选型 - ADR-002: 响应式编程选型 - ADR-003: 数据库选型 - 记录架构决策的背景、理由、影响和演进路径
2.8 KiB
2.8 KiB
ADR-003: 数据库选型
文档编号: GYM-ADR-003
版本: v1.0
日期: 2026-03-04
作者: 张翔
状态: 已采纳
状态
已采纳
决策时间
2026-03-04
决策背景
健身房管理系统需要选择合适的关系型数据库,支持响应式编程模型,满足业务需求和性能要求。
决策内容
选择 PostgreSQL 作为主数据库,而非 MySQL、Oracle 或 SQL Server。
决策理由
1. R2DBC支持完善
| 数据库 | R2DBC支持 | 成熟度 | 社区活跃度 |
|---|---|---|---|
| PostgreSQL | ✅ 完全支持 | ⭐⭐⭐⭐⭐ | 高 |
| MySQL | ✅ 完全支持 | ⭐⭐⭐⭐ | 高 |
| Oracle | ⚠️ 支持有限 | ⭐⭐ | 低 |
| SQL Server | ⚠️ 支持有限 | ⭐⭐⭐ | 中 |
2. 金融级数据库
- ACID事务支持完善
- 数据可靠性高
- 适合金融支付场景
3. JSONB支持
- 灵活存储配置数据
- 支持复杂查询
- 减少表关联
4. 全文搜索
- 内置全文搜索功能
- 支持中文分词
- 减少对Elasticsearch的依赖
5. 社区活跃
- 文档完善
- 问题解决快
- 生态成熟
替代方案
MySQL
优势:
- 社区活跃
- 文档丰富
- 运维简单
劣势:
- JSON支持不如PostgreSQL
- 全文搜索功能较弱
- 事务隔离级别支持有限
不选择原因:
- JSONB功能不如PostgreSQL
- 全文搜索需要额外组件
Oracle
优势:
- 企业级特性完善
- 性能优秀
- 技术支持好
劣势:
- 商业数据库,成本高
- R2DBC支持有限
- 学习曲线陡峭
不选择原因:
- 成本过高
- R2DBC支持不完善
影响范围
- 数据库设计
- SQL编写方式
- 性能优化
- 运维管理
后果
正面影响
- ✅ R2DBC支持完善,响应式编程无缝集成
- ✅ JSONB功能强大,配置管理灵活
- ✅ 全文搜索内置,减少组件依赖
- ✅ 金融级可靠性,数据安全有保障
负面影响
- ⚠️ 团队需要学习PostgreSQL特性
- ⚠️ 运维工具与MySQL不同
- ⚠️ 部分ORM工具支持不如MySQL
技术栈
核心组件
- PostgreSQL: 15.x
- R2DBC PostgreSQL: 1.0.0.RELEASE
- Spring Data R2DBC: 3.2.x
连接池
- R2DBC Pool: 连接池管理
- 配置: 最小连接数10,最大连接数50
监控
- PostgreSQL Exporter: Prometheus监控
- pg_stat_statements: 慢查询分析
相关文档
参考资料
- PostgreSQL官方文档
- R2DBC PostgreSQL驱动文档
- PostgreSQL性能优化指南