You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

309 lines
9.3 KiB

# 数据库使用说明
## 1. 数据库概述
本系统采用了多数据库架构,根据不同的数据类型和使用场景选择了合适的数据库技术。以下是系统中使用的数据库及其作用:
| 数据库类型 | 版本 | 作用 | 存储内容 |
|-----------|------|------|----------|
| MongoDB | 6.x | 分析结果和配置存储 | 分析结果、用户自选合约、交易信号、系统配置、用户配置、AI模型配置 |
| PostgreSQL | 15.x | 历史数据存储 | 合约基本信息、历史K线数据、市场事件记录 |
| Redis | 7.x | 缓存 | 热点数据、会话信息、API响应缓存 |
| InfluxDB | 2.x | 实时行情数据存储 | K线数据、逐笔成交数据 |
## 2. 数据库配置
### 2.1 MongoDB配置
**配置文件路径**`backend/src/config/index.ts`
**默认配置**
- 主机localhost
- 端口27017
- 数据库alpha-futures
- 认证源admin
- SSLfalse
**集合结构**
| 集合名称 | 描述 | 主要字段 |
|---------|------|----------|
| analysis_results | 分析结果 | _id, symbol, timestamp, technical_analysis, fundamental_analysis, sentiment_analysis, ai_prediction, risk_assessment |
| user_watchlists | 用户自选合约 | _id, user_id, symbols, created_at, updated_at |
| trading_signals | 交易信号 | _id, symbol, signal_type, direction, strength, timestamp, confidence, expiration |
| data_sources | 数据源配置 | _id, name, type, url, api_key, priority, enabled, status, response_time |
| ai_models | AI模型配置 | _id, name, type, api_key, url, parameters, accuracy, response_time, enabled |
| system_settings | 系统配置 | _id, key, value, description, updated_at |
| user_settings | 用户配置 | _id, user_id, preferences, notifications, created_at, updated_at |
### 2.2 PostgreSQL配置
**配置文件路径**`backend/src/config/index.ts`
**默认配置**
- 主机localhost
- 端口5432
- 数据库alpha-futures
- 用户名postgres
- 密码password
- SSLfalse
**表结构**
| 表名 | 描述 | 主要字段 |
|------|------|----------|
| futures_contracts | 合约基本信息 | id, symbol, name, exchange, type, size, price_tick, margin_rate, created_at, updated_at |
| historical_prices | 历史K线数据 | id, contract_id, timestamp, open, high, low, close, volume, open_interest |
| market_events | 市场事件记录 | id, event_type, event_date, title, content, impact_level, created_at |
### 2.3 Redis配置
**配置文件路径**`backend/src/config/index.ts`
**默认配置**
- 主机localhost
- 端口6379
- 密码:''
- 数据库0
**使用场景**
- 缓存热点数据,如市场概览、品种详情等
- 存储会话信息,如用户登录状态
- 缓存API响应减少数据库查询压力
- 存储临时数据,如速率限制计数器
### 2.4 InfluxDB配置
**配置文件路径**`backend/src/config/index.ts`
**默认配置**
- 主机localhost
- 端口8086
- 数据库alpha-futures
- 用户名:''
- 密码:''
- SSLfalse
**测量值结构**
| 测量值名称 | 描述 | 字段 | 标签 |
|-----------|------|------|------|
| futures_price | K线数据 | open, high, low, close, volume, open_interest | symbol, exchange, interval |
| market_tick | 逐笔成交数据 | price, volume, open_interest | symbol, exchange, timestamp |
## 3. 数据库使用方式
### 3.1 MongoDB使用
**连接方式**使用mongoose库连接MongoDB
**示例代码**
```typescript
import mongoose from 'mongoose';
import { config } from './config';
mongoose.connect(config.database.mongo.url)
.then(() => console.log('MongoDB连接成功'))
.catch((error) => console.error('MongoDB连接失败:', error));
```
**使用场景**
- 存储和查询分析结果
- 管理用户自选合约
- 存储交易信号
- 管理系统配置和用户配置
- 管理AI模型配置
### 3.2 PostgreSQL使用
**连接方式**使用pg库连接PostgreSQL
**示例代码**
```typescript
import { Client } from 'pg';
import { config } from './config';
const client = new Client({
host: config.database.postgres.host,
port: config.database.postgres.port,
user: config.database.postgres.user,
password: config.database.postgres.password,
database: config.database.postgres.database
});
client.connect()
.then(() => console.log('PostgreSQL连接成功'))
.catch((error) => console.error('PostgreSQL连接失败:', error));
```
**使用场景**
- 存储和查询历史K线数据
- 管理合约基本信息
- 存储市场事件记录
### 3.3 Redis使用
**连接方式**使用redis库连接Redis
**示例代码**
```typescript
import { createClient } from 'redis';
import { config } from './config';
const redisClient = createClient({
url: config.redis.url
});
redisClient.connect()
.then(() => console.log('Redis连接成功'))
.catch((error) => console.error('Redis连接失败:', error));
```
**使用场景**
- 缓存热点数据
- 存储会话信息
- 实现速率限制
- 缓存API响应
### 3.4 InfluxDB使用
**连接方式**使用influxdb-client库连接InfluxDB
**示例代码**
```typescript
import { InfluxDB, Point } from '@influxdata/influxdb-client';
import { config } from './config';
const influxDB = new InfluxDB({
url: `http://${config.database.influxDB.host}:${config.database.influxDB.port}`,
token: 'your-token' // 在生产环境中应该从环境变量获取
});
const writeApi = influxDB.getWriteApi('', config.database.influxDB.database);
// 写入数据示例
const point = new Point('futures_price')
.tag('symbol', 'AU')
.tag('exchange', 'SHFE')
.tag('interval', '1H')
.floatField('open', 2000)
.floatField('high', 2010)
.floatField('low', 1990)
.floatField('close', 2005)
.floatField('volume', 10000)
.floatField('open_interest', 50000)
.timestamp(new Date());
writeApi.writePoint(point);
writeApi.close();
```
**使用场景**
- 存储实时K线数据
- 存储逐笔成交数据
- 进行时间序列分析
## 4. 数据库迁移与备份
### 4.1 迁移策略
**MongoDB**
- 使用mongoose的Schema和Model进行数据迁移
- 对于结构变更使用mongoose的迁移工具或手动编写迁移脚本
**PostgreSQL**
- 使用数据库迁移工具如knex.js或sequelize进行迁移
- 对于结构变更编写SQL迁移脚本
### 4.2 备份策略
**MongoDB**
- 使用`mongodump`工具进行备份
- 配置定期备份任务
- 备份文件存储在安全的位置
**PostgreSQL**
- 使用`pg_dump`工具进行备份
- 配置定期备份任务
- 备份文件存储在安全的位置
**Redis**
- 使用`SAVE`或`BGSAVE`命令进行备份
- 配置定期备份任务
- 备份文件存储在安全的位置
**InfluxDB**
- 使用`influx backup`命令进行备份
- 配置定期备份任务
- 备份文件存储在安全的位置
## 5. 性能优化
### 5.1 MongoDB优化
- 创建合适的索引,加速查询
- 使用聚合管道优化复杂查询
- 限制返回字段,减少网络传输
- 使用批量操作,减少数据库请求次数
### 5.2 PostgreSQL优化
- 创建合适的索引,加速查询
- 使用视图和存储过程优化复杂查询
- 配置连接池,减少连接开销
- 使用分区表,优化大数据表查询
### 5.3 Redis优化
- 使用合适的数据结构如Hash、List、Set等
- 设置合理的过期时间,避免内存溢出
- 使用Pipeline减少网络往返时间
- 配置合适的内存策略如LRU
### 5.4 InfluxDB优化
- 使用合适的标签和字段设计
- 避免使用高基数标签
- 配置合适的保留策略
- 使用降采样,优化查询性能
## 6. 安全考虑
### 6.1 认证与授权
- 为所有数据库配置强密码
- 限制数据库用户的权限,遵循最小权限原则
- 对于生产环境使用SSL连接
### 6.2 数据加密
- 对于敏感数据如API密钥、密码等进行加密存储
- 传输过程中使用SSL加密
### 6.3 访问控制
- 限制数据库的网络访问范围,只允许应用服务器访问
- 使用防火墙规则,限制数据库端口的访问
### 6.4 审计与监控
- 启用数据库的审计日志
- 配置监控系统,监控数据库的运行状态和性能
- 定期检查数据库的安全配置
## 7. 开发建议
1. **选择合适的数据库**:根据数据类型和使用场景选择合适的数据库
2. **合理设计数据模型**:根据业务需求设计合理的数据模型
3. **使用连接池**:对于所有数据库,使用连接池管理连接
4. **实现错误处理**:对于数据库操作,实现完善的错误处理
5. **使用事务**:对于需要原子性的操作,使用数据库事务
6. **定期备份**:配置定期备份任务,确保数据安全
7. **监控性能**:监控数据库性能,及时发现和解决性能问题
8. **安全配置**:遵循数据库安全最佳实践,确保数据安全
## 8. 总结
本系统采用了多数据库架构根据不同的数据类型和使用场景选择了合适的数据库技术。MongoDB用于存储分析结果和配置数据PostgreSQL用于存储历史数据Redis用于缓存InfluxDB用于存储实时行情数据。通过合理配置和使用这些数据库可以提高系统的性能和可靠性。
在开发过程中,应该遵循数据库设计和使用的最佳实践,确保系统的性能、可靠性和安全性。同时,应该定期检查和优化数据库配置,以适应系统的不断发展和变化。