Files
Sprout-Farm/Server/MongoDB迁移说明.md

170 lines
4.6 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.
# 萌芽农场 MongoDB 迁移说明
## 概述
本文档描述了萌芽农场项目从JSON配置文件迁移到MongoDB数据库的过程。目前已完成每日签到配置的迁移为后续其他配置的迁移奠定了基础。
## 迁移内容
### 1. 已完成的迁移
#### 每日签到配置 (daily_checkin_config.json)
- **原位置**: `Server/config/daily_checkin_config.json`
- **新位置**: MongoDB数据库 `mengyafarm.gameconfig` 集合
- **文档ID**: `687cce278e77ba00a7414ba2`
- **状态**: ✅ 已完成迁移
### 2. 数据库配置
#### 测试环境
- **地址**: `localhost:27017`
- **数据库**: `mengyafarm`
- **集合**: `gameconfig`
#### 生产环境
- **地址**: `192.168.31.233:27017`
- **数据库**: `mengyafarm`
- **集合**: `gameconfig`
## 技术实现
### 1. MongoDB API (SMYMongoDBAPI.py)
创建了专门的MongoDB API类提供以下功能
#### 核心功能
- 数据库连接管理(测试/生产环境)
- 游戏配置的读取和更新
- 通用文档操作(增删改查)
- 错误处理和日志记录
#### 主要方法
```python
# 配置管理
get_daily_checkin_config() # 获取每日签到配置
update_daily_checkin_config() # 更新每日签到配置
get_game_config(config_type) # 获取通用游戏配置
set_game_config(config_type, data) # 设置通用游戏配置
# 通用操作
insert_document(collection, doc) # 插入文档
find_documents(collection, query) # 查找文档
update_document(collection, query, update) # 更新文档
delete_document(collection, query) # 删除文档
```
### 2. 服务器集成 (TCPGameServer.py)
#### 修改内容
- 添加MongoDB API导入和初始化
- 修改 `_load_daily_check_in_config()` 方法优先使用MongoDB
- 添加 `_update_daily_checkin_config_to_mongodb()` 方法
- 实现优雅降级MongoDB失败时自动回退到JSON文件
#### 配置加载策略
1. **优先**: 尝试从MongoDB获取配置
2. **备选**: 从JSON文件加载配置
3. **兜底**: 使用默认配置
## 测试验证
### 1. MongoDB API测试
运行 `python SMYMongoDBAPI.py` 进行基础功能测试
### 2. 迁移功能测试
运行 `python test_mongodb_migration.py` 进行完整迁移测试
### 3. 服务器集成测试
运行 `python test_server_mongodb.py` 进行服务器集成测试
## 使用说明
### 1. 环境配置
#### 测试环境
```python
api = SMYMongoDBAPI("test") # 连接到 localhost:27017
```
#### 生产环境
```python
api = SMYMongoDBAPI("production") # 连接到 192.168.31.233:27017
```
### 2. 获取配置
```python
# 获取每日签到配置
config = api.get_daily_checkin_config()
# 获取通用游戏配置
config = api.get_game_config("config_type")
```
### 3. 更新配置
```python
# 更新每日签到配置
success = api.update_daily_checkin_config(new_config)
# 设置通用游戏配置
success = api.set_game_config("config_type", config_data)
```
## 后续迁移计划
### 1. 待迁移的配置文件
- [ ] `item_config.json` - 道具配置
- [ ] `pet_data.json` - 宠物配置
- [ ] 其他游戏配置文件
### 2. 迁移步骤
1. 将JSON文件导入到MongoDB
2. 修改对应的加载方法
3. 添加更新方法
4. 编写测试用例
5. 验证功能正常
### 3. 迁移原则
- **渐进式迁移**: 一次迁移一个配置文件
- **向后兼容**: 保持JSON文件作为备选方案
- **充分测试**: 每个迁移都要有完整的测试覆盖
- **文档更新**: 及时更新相关文档
## 注意事项
### 1. 数据安全
- 定期备份MongoDB数据
- 重要配置修改前先备份
- 测试环境验证后再应用到生产环境
### 2. 性能考虑
- MongoDB连接池管理
- 配置缓存策略
- 错误重试机制
### 3. 监控和日志
- 记录配置加载来源
- 监控MongoDB连接状态
- 记录配置更新操作
## 故障排除
### 1. MongoDB连接失败
- 检查MongoDB服务是否启动
- 验证连接地址和端口
- 检查网络连接
### 2. 配置加载失败
- 检查MongoDB中是否存在对应文档
- 验证文档格式是否正确
- 查看服务器日志获取详细错误信息
### 3. 配置更新失败
- 检查MongoDB权限
- 验证更新数据格式
- 确认文档ID是否正确
## 总结
本次迁移成功实现了每日签到配置从JSON文件到MongoDB的迁移建立了完整的MongoDB API框架为后续其他配置的迁移提供了可靠的基础。迁移过程采用了渐进式和向后兼容的策略确保了系统的稳定性和可靠性。
通过测试验证MongoDB迁移功能运行正常服务器能够正确使用MongoDB中的配置数据同时保持了JSON文件的备选方案为后续的全面迁移奠定了坚实的基础。