Files
collector/README_NEW.md
2026-04-07 12:22:57 +08:00

4.6 KiB

QMT数据采集器

这是一个用于采集QMT交易客户端状态数据并存储到PostgreSQL数据库的服务。

功能特性

  • 使用 github.com/robfig/cron/v3 定时任务调度
  • 每5秒(可配置)从HTTP接口采集数据
  • 计算数据SHA256哈希值,检测数据变化
  • 仅在数据变化时使用 GORM ORM存储到数据库,避免重复数据
  • 自动数据库表结构迁移
  • 完整的日志记录
  • 优雅退出支持
  • 环境变量配置

数据结构

采集的数据包括:

  • 资产信息: 账户资金、市值、盈亏等
  • 订单信息: 所有委托订单详情
  • 持仓信息: 当前持仓股票及盈亏
  • 行情数据: 实时tick行情数据

数据库表结构

系统会自动创建以下数据表:

  1. assets_snapshots - 资产快照表
  2. orders - 订单表
  3. positions - 持仓表
  4. tick_data - 行情数据表
  5. collection_logs - 采集日志表

详细的表结构请查看 scripts/schema.sql

快速开始

1. 安装依赖

go mod download

2. 配置环境变量

复制 .env.example.env 并修改配置:

cp .env.example .env

编辑 .env 文件:

# 采集地址
COLLECTOR_URL=http://localhost:5000/status

# 数据库连接字符串 (修改为你的实际配置)
DATABASE_URL=postgres://user:password@localhost:5432/qmt_db?sslmode=disable

# 采集间隔(秒)
COLLECTION_INTERVAL=5

注意: 使用GORM后,程序会自动创建和迁移数据库表结构,无需手动执行SQL脚本。

3. 运行程序

go run cmd/main.go

或者设置环境变量后运行:

export COLLECTOR_URL=http://localhost:5000/status
export DATABASE_URL=postgres://user:password@localhost:5432/qmt_db?sslmode=disable
export COLLECTION_INTERVAL=5
go run cmd/main.go

4. 编译程序

go build -o collector cmd/main.go

配置说明

环境变量 说明 默认值
COLLECTOR_URL 数据采集地址 http://localhost:5000/status
DATABASE_URL PostgreSQL连接字符串 postgres://user:password@localhost:5432/qmt_db?sslmode=disable
COLLECTION_INTERVAL 采集间隔(秒) 5

项目结构

collector/
├── cmd/
│   └── main.go           # 主程序入口
├── collector/
│   └── collector.go      # 数据采集器(HTTP请求、Hash计算)
├── models/
│   └── models.go         # 数据模型定义
├── storage/
│   └── storage.go        # 数据库存储模块
├── scripts/
│   ├── schema.sql        # 数据库表结构SQL
│   ├── build.sh          # 构建脚本
│   ├── deploy.sh         # 部署脚本
│   └── update.sh         # 更新脚本
├── exmple/
│   └── status.json       # 数据样本
├── go.mod                # Go模块文件
└── README.md             # 说明文档

技术栈

  • 定时任务: github.com/robfig/cron/v3 - 强大的cron表达式调度器
  • ORM框架: GORM - Go语言优秀的ORM库
  • 数据库驱动: gorm.io/driver/postgres - PostgreSQL驱动
  • 数据库: PostgreSQL 9.6+

工作原理

  1. 定时调度: 使用cron调度器,根据配置的间隔定时执行采集任务
  2. 数据采集: 向配置的URL发起HTTP GET请求获取JSON数据
  3. Hash计算: 对获取的数据计算SHA256哈希值
  4. 变化检测: 对比当前哈希与上次哈希,判断数据是否变化
  5. 数据存储: 如果数据有变化,使用GORM事务将数据保存到PostgreSQL数据库
  6. 自动迁移: 启动时自动检查并创建/更新数据库表结构
  7. 日志记录: 每次采集都记录日志,包括hash值和是否变化

错误处理

  • HTTP请求失败会记录错误日志并继续下一次采集
  • 数据库连接失败会导致程序退出
  • 数据存储失败会记录错误但不会中断程序

注意事项

  1. 确保PostgreSQL数据库已正确配置并可访问
  2. 使用GORM后无需手动执行SQL脚本,程序启动时会自动创建和迁移表结构
  3. 建议在生产环境使用更安全的数据库连接方式
  4. 可以根据需要调整采集间隔,但不建议设置过小
  5. GORM会自动管理索引和表结构变更

开发

添加新功能

  1. models/models.go 中添加数据模型
  2. storage/storage.go 中实现数据库操作
  3. collector/collector.go 中扩展采集逻辑
  4. cmd/main.go 中集成新功能

测试

可以使用 exmple/status.json 中的样本数据进行测试。

许可证

MIT License