170 lines
4.6 KiB
Markdown
170 lines
4.6 KiB
Markdown
# 萌芽农场 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文件的备选方案,为后续的全面迁移奠定了坚实的基础。 |