Files
gym-manage/docs/02-ARCHITECTURE/架构决策记录/ADR-003-数据库选型.md
T
张翔 35dc950e4f docs: 创建架构决策记录(ADR)
- ADR-001: 单体应用架构选型
- ADR-002: 响应式编程选型
- ADR-003: 数据库选型
- 记录架构决策的背景、理由、影响和演进路径
2026-04-04 14:08:53 +08:00

158 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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**: 慢查询分析
---
## 相关文档
- [DB-数据库设计](../技术架构/DB-数据库设计.md)
- [T-ILD-基础版-技术实现详细设计](../技术架构/T-ILD-基础版-技术实现详细设计.md)
- [EVAL-002-性能与可扩展性评估报告](../../03-EVALUATION/EVAL-002-性能与可扩展性评估报告.md)
---
## 参考资料
- PostgreSQL官方文档
- R2DBC PostgreSQL驱动文档
- PostgreSQL性能优化指南