|
|
# 数据库使用说明
|
|
|
|
|
|
## 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
|
|
|
- SSL:false
|
|
|
|
|
|
**集合结构**:
|
|
|
|
|
|
| 集合名称 | 描述 | 主要字段 |
|
|
|
|---------|------|----------|
|
|
|
| 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
|
|
|
- SSL:false
|
|
|
|
|
|
**表结构**:
|
|
|
|
|
|
| 表名 | 描述 | 主要字段 |
|
|
|
|------|------|----------|
|
|
|
| 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
|
|
|
- 用户名:''
|
|
|
- 密码:''
|
|
|
- SSL:false
|
|
|
|
|
|
**测量值结构**:
|
|
|
|
|
|
| 测量值名称 | 描述 | 字段 | 标签 |
|
|
|
|-----------|------|------|------|
|
|
|
| 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用于存储实时行情数据。通过合理配置和使用这些数据库,可以提高系统的性能和可靠性。
|
|
|
|
|
|
在开发过程中,应该遵循数据库设计和使用的最佳实践,确保系统的性能、可靠性和安全性。同时,应该定期检查和优化数据库配置,以适应系统的不断发展和变化。 |