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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

数据库使用说明

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

示例代码

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

  • 使用SAVEBGSAVE命令进行备份
  • 配置定期备份任务
  • 备份文件存储在安全的位置

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用于存储实时行情数据。通过合理配置和使用这些数据库可以提高系统的性能和可靠性。

在开发过程中,应该遵循数据库设计和使用的最佳实践,确保系统的性能、可靠性和安全性。同时,应该定期检查和优化数据库配置,以适应系统的不断发展和变化。