vnpy各个数据库方案对比
如果你使用的是小时线以上级别的k线。或者只保存几个品种的数据,那么就不用看这篇文章了。
如果你想保存所有的分钟或者tick数据,数据总量会到达亿级。那么就需要好好构思下数据存储的方案。
首先我们看下vnpy数据库的模块
SQL类
SQLite(sqlite):轻量级单文件数据库,无需安装和配置数据服务程序,VeighNa的默认选项,适合入门新手用户
MySQL(mysql):主流的开源关系型数据库,文档资料极为丰富,且可替换其他NewSQL兼容实现(如TiDB)
PostgreSQL(postgresql):特性更为丰富的开源关系型数据库,支持通过扩展插件来新增功能,只推荐熟手使用
NoSQL类
DolphinDB(dolphindb):一款高性能分布式时序数据库,适用于对速度要求极高的低延时或实时性任务
Arctic(arctic):高性能金融时序数据库,采用了分块化储存、LZ4压缩等性能优化方案,以实现时序数据的高效读写
TDengine(taos):分布式、高性能、支持SQL的时序数据库,带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少研发和运维的复杂度
TimescaleDB(timescaledb):基于PostgreSQL开发的一款时序数据库,以插件化扩展的形式安装,支持自动按空间和时间对数据进行分区
MongoDB(mongodb):基于分布式文件储存(bson格式)的文档式数据库,内置的热数据内存缓存提供更快读写速度
InfluxDB(influxdb):针对TimeSeries Data专门设计的时序数据库,列式数据储存提供极高的读写效率和外围分析应用
LevelDB(leveldb):由Google推出的高性能Key/Value数据库,基于LSM算法实现进程内存储引擎,支持数十亿级别的海量数据
首先排除sql类型数据库,由于行情属于属于高频低信息含量的数据,比较适合OLAP储存方案,也就是clickhouse类型的数据库以及专门为时间序列准备的数据库,所有剩下的方案只有
dolphindb, arctic , tdengine, timescaledb,InfluxDB
而从性能上考虑,只有两个能打的
dolphindb,tdengine 这两个都是国产!中国在时间序列数据库上可以说遥遥领先。
最流行的influxdb为什么不选,单点丢失数据严重,集群功能不开源。
dolphindb免费版本支持2核8G的内存,如果不保存tick数据或者股票的level2行情绝对够用。
如果想保存tick行情和level2行情,那么使用tdengine吧! 开源,并且支持集群功能,绝对的国产良心。
TDengine安装
看文章的大部分都是windows系统,安装TDengine前需要先安装docker
https://www.docker.com/products/docker-desktop/
安装完成后不要着急打开,因为默认的安装路径是c盘,而安装数据库后,数据会把c盘撑爆。所以需要把docker迁移到d盘中
// 把F:\DockerDesktop\data\docker-desktop.tar替换成自己的目录
wsl --export docker-desktop F:\DockerDesktop\data\docker-desktop.tar
// 把F:\DockerDesktop\data\docker-desktop-data.tar替换成自己的目录
wsl --export docker-desktop-data F:\DockerDesktop\data\docker-desktop-data.tar
wsl --unregister docker-desktop-data
wsl --unregister docker-desktop
//F:\DockerDesktop\docker-desktop\ 是安装目录 F:\DockerDesktop\data\docker-desktop.tar是上面命令的备份文件
wsl --import docker-desktop F:\DockerDesktop\docker-desktop\ F:\DockerDesktop\data\docker-desktop.tar --version 2
wsl --import docker-desktop-data F:\DockerDesktop\docker-desktop-data\ F:\DockerDesktop\data\docker-desktop-data.tar --version 2
打开cmd 使用docker安装TDengine
docker pull tdengine/tdengine:latest
docker run --name tdengine -d -p 6030:6030 -p 6041:6041 -p 6043-6049:6043-6049 -p 6043-6049:6043-6049/udp tdengine/tdengine
出现图中的标志就是安装成功。

tdengine在查询和存储上会比mongodb快很多,未来就算数据量到达TB级别,也可以通过扩展集群的方式轻松驾驭。
在vnpy中使用TDengine
- 安装vnpy_taos 这是TDengine的调用库
- 设置数据库配置
- 默认的用户名是root 用户密码 taosdata



其他的存储方案
其实行情数据最适合的是文件存储,因为所有的行情我们在提取的时候都是按照合约来调用的,所以每一个合约存储一个文件,或者把tick行情按照合约(代码)/日期 进行存储,进行适当的压缩,这样更加方便管理。
其实在wondertrader中,我们就可以看到这种方案的设计思想,压缩率高,使用方便,并且文件管理更加直观一些。
这个系列会记录我从头打造一个智能交易系统,基本上都是每天的开发随笔记录。中间会踩不少的坑,跟随我你能发现量化交易的开发会是多么无聊又刺激的一件事情!
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73762
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!