35dc950e4f
- ADR-001: 单体应用架构选型 - ADR-002: 响应式编程选型 - ADR-003: 数据库选型 - 记录架构决策的背景、理由、影响和演进路径
158 lines
2.8 KiB
Markdown
158 lines
2.8 KiB
Markdown
# 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性能优化指南
|