实时保存股票 tick 数据,采用什么数据结构或者数据库比较好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
yagamil
V2EX    Python

实时保存股票 tick 数据,采用什么数据结构或者数据库比较好?

  •  
  •   yagamil 2022-07-16 01:47:01 +08:00 3467 次点击
    这是一个创建于 1259 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景: 定时器每 3s 接收到一次数据,拿到股票池( 500 多只)的实时价格。 这时需要吧这些数据进行存储,存储完毕后需要运算,比如获取 x 分钟内的涨速,( x 为变量,有用户设定),选出标的。类似这样需要使用日内 tick 数据进行运算。

    目前的方案是使用的 sqlite 进行存储( memory 模式),一天下来大概 200 万条数据。各种指标也转换为一些的 sql 语句。 但由于数据越到后面,插入和查询的时间也明显增长得比较厉害。

    请问高手们,有什么好的数据结构或者数据库可以推荐,或者有什么好的架构思路?

    交易也是实时进行的。 后期还需要扩展到使用 level 数据,时间间隔会在毫秒的。

    暂且还是用 python ,我也知道 c++快,可是实现太难,进度也不允许。

    12 条回复    2022-07-18 21:06:17 +08:00
    israinbow
        1
    israinbow  
       2022-07-16 05:38:35 +08:00 via Android
    关系型数据库把两百万条数据放一个表里是不可取得,至少得按时间段分表。
    若愿意用 kv 数据库,就上 HBase ,适合高并发的时序数据类型。
    jones2000
        2
    jones2000  
       2022-07-16 06:24:35 +08:00
    可以用 TiDB 数据库试试
    delectate
        3
    delectate  
       2022-07-16 07:34:00 +08:00   4
    不要造轮子,建议采用 win 所有股票软件常用的方法解决问题:
    不同品种,不同周期,分别放在不同的文件内。这样一来每个文件体积会很小,剩下的就是考验 fs 的极限了。

    举个例子,rb2210 。tick 、1 、5 、日这四个数据分别按照月或者更小的颗粒度保存在不同文件夹。
    2022-07
    |-tick / rb / 2210 / data.bin
    |-1min / rb / 2210 / data.bin
    |-5min / rb / 2210 / data.bin
    |-day / rb / 2210 / data.bin

    要单独维护一张表,即该品种的主力合约存在移仓、跨月情况,要去读取哪几个数据库。

    非 5f 倍数的周期用 1f 数据(如 3f ); 5f 倍数的周期用 5f 数据(如 5f 、15f 、30f 、1H 、4H );日线或者以上用日线的数据计算(如周、月、季、年),此方式适合股票,期货另说。
    BrettD
        4
    BrettD  
       2022-07-16 07:50:39 +08:00 via iPhone
    Kdb
    tramm
        5
    tramm  
       2022-07-16 09:05:40 +08:00
    时序数据库?
    yagamil
        6
    yagamil  
    OP
       2022-07-16 09:57:01 +08:00
    @delectate 谢谢老哥详细的回复。 这里只用到当天的历史 tick ,3s 级的,其余的历史数据用不到。 实时查询 使用 io ,比在内存里读取还是慢很多。 之前还用的双向队列存储,长度用户初始化时设定,这样比存 sqlite 要省空间,就查询时比较麻烦。
    yagamil
        7
    yagamil  
    OP
       2022-07-16 09:58:55 +08:00
    @BrettD 搜了下,是个好东西
    yejinmo
        8
    yejinmo  
       2022-07-16 11:42:47 +08:00
    TDEngine
    国内已经有用这个做交易数据的了
    mxuan
        9
    mxuan  
       2022-07-16 15:14:13 +08:00
    KDB ,压缩比巨高,就是要收费(小数据量个人版免费)。次之就是用 HBASE ,influxdb 也是可以的。
    其实感觉你的需求偏向 HTAP 数据库,典型的就是 TiDB 。
    HelloAmadeus
        10
    HelloAmadeus  
       2022-07-17 01:07:18 +08:00
    直接存 hdf5 里,每日 tick 量都是固定的,array length 先申请,直接填数据就行,很快的。之前做量化的 tick 就是这样存的。
    yagamil
        11
    yagamil  
    OP
       2022-07-17 02:47:22 +08:00
    @HelloAmadeus 这个似乎不错,准备试试。谢谢老哥
    UN2758
        12
    UN2758  
       2022-07-18 21:06:17 +08:00
    前司是 HDF5 格式存的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5770 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:16 PVG 14:16 LAX 22:16 JFK 01:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86