You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL或Django环境下股票定时爬取数据的数据库建模方案求助

股票爬取数据存储与对比方案建议

是否需要保存全量爬取条目

非常建议保存所有爬取到的原始条目,原因如下:

  • 单条股票价格数据存储成本极低,按你10分钟200条的量级,单日仅产生28800条数据,哪怕连续存储3年总数据量也不足3000万条,普通MySQL实例完全可以无压力承载,完全不需要为了节省存储成本舍弃原始数据。
  • 全量原始数据可以支撑后续的多周期涨跌幅计算、异常数据回溯、爬取故障排查等需求,你当前只需要10分钟间隔对比,但后续业务扩展不需要重新补历史数据。
  • 可以给数据表添加(公司标识, 爬取时间戳)的唯一索引,避免重复数据入库,同时提升按时间筛选的查询效率。

如果确实有极致精简存储的需求,也可以仅保留最近2个周期的爬取数据,但该方案不推荐,后续扩展功能会受到极大限制。

对比逻辑实现方案

你提到的对比逻辑完全可行,且可以通过全量原始数据表简化实现,不需要额外存储对比基准节点:

  • 每次新爬取的数据入库后,直接从表中筛选对应公司上一个10分钟周期的爬取数据做差值计算,即可得到阶段收益。
  • 示例:12:20新数据入库后,直接筛选该公司12:10的爬取记录做差值即可,计算逻辑稳定,不会因为某次爬取失败导致基准节点丢失。
  • 非爬取时点的实时收益提示,直接取最近一次爬取的价格和上一个周期的价格做差值即可,比如12:18的收益直接用12:10的价格减12:00的价格计算。

参考实现

表结构设计

CREATE TABLE stock_price (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    company_code VARCHAR(50) NOT NULL COMMENT '公司股票代码/唯一标识',
    company_name VARCHAR(100) NOT NULL COMMENT '公司名称',
    price DECIMAL(10,2) NOT NULL COMMENT '当前股价',
    crawl_time DATETIME NOT NULL COMMENT '数据爬取时间',
    UNIQUE KEY uk_company_crawltime (company_code, crawl_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

差值查询示例

查询公司A 12:00到12:10的收益的SQL语句:
SELECT t1.price - t2.price AS profit FROM stock_price t1 JOIN stock_price t2 ON t1.company_code = t2.company_code WHERE t1.company_code = 'A' AND t1.crawl_time = '2024-xx-xx 12:10:00' AND t2.crawl_time = '2024-xx-xx 12:00:00';

内容的提问来源于stack exchange,提问作者lord stock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:54:04