# 数据源冗余机制使用指南

## 📋 功能概述

系统已实现**Akshare和Tushare双数据源自动切换机制**，当Akshare获取数据失败时，系统会自动切换到Tushare获取数据，确保数据获取的稳定性和可靠性。

## ✨ 核心特性

### 1. 自动切换
- ✅ 优先使用Akshare（免费，无需配置）
- ✅ Akshare失败时自动切换到Tushare
- ✅ 全程自动化，无需手动干预
- ✅ 详细的日志输出，方便追踪数据来源

### 2. 支持的数据类型

| 数据类型 | Akshare | Tushare | 说明 |
|---------|---------|---------|------|
| 股票历史数据 | ✅ | ✅ | K线、成交量等 |
| 股票基本信息 | ✅ | ✅ | 名称、行业、市值等 |
| 实时行情 | ✅ | ✅ | 最新价格、涨跌幅 |
| 财务数据 | ✅ | ✅ | 利润表、资产负债表 |
| 资金流向 | ✅ | ✅ | 大单、小单流入流出 |
| 市场情绪 | ✅ | ✅ | ARBR、换手率 |
| 大盘指数 | ✅ | ✅ | 上证指数等 |

## 🔧 配置步骤

### 第一步：获取Tushare Token

1. 访问 [Tushare官网](https://tushare.pro)
2. 注册账号并登录
3. 进入个人中心
4. 复制Token

### 第二步：配置环境变量

#### 方法1：通过界面配置（推荐）

1. 启动系统
2. 点击左侧 **⚙️ 环境配置**
3. 切换到 **📊 数据源配置** 标签页
4. 填写 **Tushare Token**
5. 点击 **💾 保存配置**

#### 方法2：手动编辑.env文件

在`.env`文件中添加：

```bash
# Tushare数据接口配置（可选，用作备用数据源）
TUSHARE_TOKEN="your_tushare_token_here"
```

### 第三步：重启应用

保存配置后重启应用，系统会自动初始化Tushare数据源。

## 📊 工作原理

### 数据获取流程

```
┌─────────────────┐
│  开始获取数据    │
└────────┬────────┘
         │
         v
┌─────────────────┐
│ 尝试Akshare获取 │
└────────┬────────┘
         │
    成功 │ 失败
  ┌──────┴──────┐
  │             │
  v             v
┌────┐    ┌──────────────┐
│返回│    │检查Tushare配置│
└────┘    └──────┬───────┘
                 │
           已配置 │ 未配置
          ┌──────┴──────┐
          │             │
          v             v
   ┌────────────┐   ┌────┐
   │Tushare获取 │   │失败│
   └──────┬─────┘   └────┘
          │
    成功  │ 失败
   ┌──────┴──────┐
   │             │
   v             v
 ┌────┐      ┌────┐
 │返回│      │失败│
 └────┘      └────┘
```

### 日志输出示例

```bash
# 示例1：Akshare成功
[Akshare] 正在获取 600519 的历史数据...
[Akshare] ✅ 成功获取 243 条数据

# 示例2：Akshare失败，Tushare成功
[Akshare] 正在获取 600519 的历史数据...
[Akshare] ❌ 获取失败: Connection timeout
[Tushare] 正在获取 600519 的历史数据（备用数据源）...
[Tushare] ✅ 成功获取 243 条数据

# 示例3：Tushare未配置
[Akshare] 正在获取 600519 的历史数据...
[Akshare] ❌ 获取失败: Connection timeout
ℹ️ 未配置Tushare Token，将仅使用Akshare数据源
❌ 所有数据源均获取失败
```

## 🎯 使用场景

### 场景1：日常使用（仅Akshare）

**适用情况**：
- 网络稳定
- Akshare服务正常
- 不需要Tushare特殊数据

**配置**：
- 无需配置Tushare Token
- 系统仅使用Akshare

### 场景2：生产环境（Akshare + Tushare）

**适用情况**：
- 需要高可用性
- 自动化交易系统
- 定时任务分析

**配置**：
- 配置Tushare Token
- 启用双数据源冗余

### 场景3：Akshare受限

**适用情况**：
- Akshare访问受限
- 需要更专业的数据
- Tushare有特殊接口

**配置**：
- 配置Tushare Token
- 系统自动切换到Tushare

## 📈 数据对比

### Akshare vs Tushare

| 对比项 | Akshare | Tushare |
|--------|---------|---------|
| **费用** | 完全免费 | 免费（有限额） |
| **注册** | 无需注册 | 需要注册 |
| **配置** | 无需配置 | 需要Token |
| **数据更新** | 实时 | 准实时 |
| **稳定性** | 较好 | 优秀 |
| **数据量** | 丰富 | 非常丰富 |
| **API限制** | 无明显限制 | 有调用限额 |
| **适用场景** | 日常分析 | 专业投研 |

## 🔍 故障排查

### 问题1：Tushare初始化失败

**现象**：
```
⚠️ Tushare数据源初始化失败: No module named 'tushare'
```

**解决方法**：
```bash
# 安装tushare库
pip install tushare>=1.3.0

# 或更新requirements.txt后安装
pip install -r requirements.txt
```

### 问题2：Tushare Token无效

**现象**：
```
[Tushare] ❌ 获取失败: Invalid token
```

**解决方法**：
1. 检查Token是否正确复制
2. 确认Token未过期
3. 登录Tushare官网重新获取Token

### 问题3：Tushare调用限额

**现象**：
```
[Tushare] ❌ 获取失败: API call limit exceeded
```

**解决方法**：
1. 等待限额重置（通常是每分钟/每天）
2. 升级Tushare积分等级
3. 优化查询频率

### 问题4：两个数据源都失败

**现象**：
```
❌ 所有数据源均获取失败
```

**解决方法**：
1. 检查网络连接
2. 确认股票代码正确
3. 检查是否为交易时间
4. 查看详细错误日志

## 💡 最佳实践

### 1. Token管理

```bash
# ❌ 错误：直接写在代码中
tushare_token = "your_token_here"

# ✅ 正确：使用环境变量
TUSHARE_TOKEN="your_token_here"  # 在.env文件中
```

### 2. 错误处理

系统已自动处理数据获取失败的情况，无需额外编码。

### 3. 日志监控

关注日志中的以下标记：
- `[Akshare]` - Akshare数据源操作
- `[Tushare]` - Tushare数据源操作
- `✅` - 操作成功
- `❌` - 操作失败
- `⚠️` - 警告信息

### 4. 性能优化

- 优先使用Akshare（响应更快）
- Tushare作为备用（更稳定）
- 合理设置数据缓存
- 避免频繁重复请求

## 📝 代码示例

### 自动使用数据源管理器

所有数据获取模块已自动集成数据源管理器，无需修改业务代码：

```python
# 在stock_data.py中
from data_source_manager import data_source_manager

# 获取历史数据（自动切换）
df = data_source_manager.get_stock_hist_data(
    symbol="600519",
    start_date="20240101",
    end_date="20241018",
    adjust='qfq'
)
```

### 手动使用数据源管理器

如需在自定义模块中使用：

```python
from data_source_manager import data_source_manager

# 1. 获取股票历史数据
hist_data = data_source_manager.get_stock_hist_data(
    symbol="600519",
    start_date="20240101",
    end_date="20241018"
)

# 2. 获取股票基本信息
basic_info = data_source_manager.get_stock_basic_info("600519")

# 3. 获取实时行情
quotes = data_source_manager.get_realtime_quotes("600519")

# 4. 获取财务数据
financial = data_source_manager.get_financial_data(
    symbol="600519",
    report_type='income'  # income/balance/cashflow
)
```

## 🔐 安全建议

### Token保护

1. **不要**将Token提交到版本控制
   ```bash
   # 在.gitignore中添加
   .env
   ```

2. **不要**在代码中硬编码Token

3. **定期**更换Token

4. **限制**Token的使用范围

## 📊 监控与统计

### 查看数据源使用情况

系统日志会记录每次数据获取使用的数据源，便于统计：

```bash
# 统计示例（从日志中提取）
Akshare成功: 95次
Tushare备用: 5次
全部失败: 0次

成功率: 100%
Tushare使用率: 5%
```

## 🎓 进阶功能

### 1. 自定义数据源优先级

当前默认：Akshare > Tushare

如需修改，编辑`data_source_manager.py`中的获取顺序。

### 2. 添加更多数据源

可以扩展`DataSourceManager`类，添加其他数据源（如Wind、东方财富等）。

### 3. 数据源监控告警

可以添加监控逻辑，当某个数据源失败率过高时发送告警。

## 📞 技术支持

### 相关文档

- [Akshare官方文档](https://akshare.akfamily.xyz)
- [Tushare官方文档](https://tushare.pro/document/2)
- [环境配置功能说明](./环境配置功能说明.md)

### 常见问题

1. **Q: 是否必须配置Tushare？**
   A: 不是。仅使用Akshare也可以正常工作，Tushare作为可选的备用数据源。

2. **Q: Tushare免费版有限制吗？**
   A: 有。免费版有每分钟调用次数限制，可通过做任务获得积分提升限额。

3. **Q: 数据源切换会影响性能吗？**
   A: 影响很小。只有在Akshare失败时才会尝试Tushare，增加的延迟在可接受范围内。

4. **Q: 可以只使用Tushare吗？**
   A: 可以，但不推荐。系统设计为优先Akshare，这样可以节省Tushare的调用额度。

## 🎉 总结

数据源冗余机制为系统提供了：

- ✅ **更高的可用性** - 单点故障不影响使用
- ✅ **更好的稳定性** - 自动容错恢复
- ✅ **更强的灵活性** - 可扩展多数据源
- ✅ **零学习成本** - 全自动化运行

现在您可以放心使用系统进行股票分析，无需担心数据获取问题！

---

**更新日期**: 2025-10-18  
**版本**: v1.0.0  
**适用系统**: AI股票分析系统

