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.
9.3 KiB
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
- 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
示例代码:
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
示例代码:
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
示例代码:
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
示例代码:
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. 开发建议
- 选择合适的数据库:根据数据类型和使用场景选择合适的数据库
- 合理设计数据模型:根据业务需求设计合理的数据模型
- 使用连接池:对于所有数据库,使用连接池管理连接
- 实现错误处理:对于数据库操作,实现完善的错误处理
- 使用事务:对于需要原子性的操作,使用数据库事务
- 定期备份:配置定期备份任务,确保数据安全
- 监控性能:监控数据库性能,及时发现和解决性能问题
- 安全配置:遵循数据库安全最佳实践,确保数据安全
8. 总结
本系统采用了多数据库架构,根据不同的数据类型和使用场景选择了合适的数据库技术。MongoDB用于存储分析结果和配置数据,PostgreSQL用于存储历史数据,Redis用于缓存,InfluxDB用于存储实时行情数据。通过合理配置和使用这些数据库,可以提高系统的性能和可靠性。
在开发过程中,应该遵循数据库设计和使用的最佳实践,确保系统的性能、可靠性和安全性。同时,应该定期检查和优化数据库配置,以适应系统的不断发展和变化。