百科问答小站 logo
百科问答小站 font logo



金融分析量化系统,高频交易程序数据库通常采用哪种方式存贮数据? 第1页

  

user avatar   zhe-jiang-zhi-yu-ke-ji-you-xian-gong-si 网友的相关建议: 
      

在花街的量化对冲基金和投行的股票、期权的量化交易部门工作过10年,用过各种时序数据库、数据仓库以及NoSQL数据库,来说说我的看法。

选取什么样的数据库主要看3个问题:(1)数据的规模和频率,(2)数据用来解决什么问题,(3)愿意花多少成本(学习开发成本,以及软件采购成本)

数据的规模和频率

如果数据只有几百兆到几个G (10G以下),选什么都关系不大。这点数据量无论是数据仓库(Greenplum, Redshift, TeraData),事务数据库(MySQL,Oracel), NoSQL(Cassandra, redis, MongoDB, HBase, InfluxDB), 文件(hdf5, csv)都不是问题。

但是数据到了几百G和几个T,事务型数据库基本不行了,文件也不行了,NoSQL需要sharding的支持,MPP数据仓库没问题。

如果数据量更大,几十T到几百T,基本上只剩下MPP数据仓库,或类似的系统譬如SQL on Hadoop,kdb+

另外看数据更新的频率。如果是静态数据,用什么存储都可以,但是如果要实时更新,文件和数据仓库都不能直接用,事务数据库勉强可用,hbase,influxdb这样的NoSQL可以用,kdb+这样的内存数据库可以用。

数据用来解决什么问题

如果是按key查询,譬如要查询某一条fix message,要查询某一个时间点某个股票的报价等等,NoSQL是一个不错的选择,查询速度很快,内存数据库kdb+等也不错,事务数据库勉强可以,其它的都不是很好。

如果需要查询大块的数据(某一天某个股票tick level的报价和交易),或者需要group by,甚至多表join(譬如trades和quotes表的join),sliding window等,那么可以彻底放弃NoSQL,事务数据库也会有性能问题,数据仓库是一个选择,文件加Pandas等工具,也是一个解决方案。

如果需要交易策略的回测,复杂的signal生成等功能,选择不是很多,要么直接使用kdb+这样的数据库,要么将数据存储在数据仓库中,然后将高频数据转换成相对低频的数据,在pandas,matlab这样的工作站软件中处理。

愿意花多少成本

kdb+和商业化的数据仓库license fee都很昂贵。kdb+的学习和维护成本也是很高的。但是一旦掌握了kdb+,很多人还是很喜欢用,简洁高效,表达能力很强。

文件(csv,hdf5)的学习成本是最低的,开源的NoSQL,数据库,数据仓库的单机部署还OK,但是涉及到多节点部署,数据sharding和分区,部署配置和维护成本都不低。


看了你的要求,既有海量的历史数据要存储,也要实时处理当天的数据,而且数据的应用不少,如果不考虑成本,kdb+很合适。如果预算非常有限,简配可以考虑使用多个开源软件的组合,历史数据的存储可以使用开源的数据仓库Greenplum,当天的数据可以考虑使用消息系统kafka + 开源的实时处理引擎 + hbase 来处理当天的数据,market close后将数据dump到数据仓库,或者每天维护一个hdf5这样的文件。当然管理起来非常麻烦,性能也没有kdb+好。还有一个选项如果每天的数据量在几个G到十几G之间,也可以考虑用免费版的32位kdb+来支持当天的实时数据处理,然后每天结束的时候,把数据弄到Greenplum这样的免费数仓中去。


最后做一个广告,推荐一下我们刚刚release的时序数据库DolphinDB。这个产品一开始是针对kdb+设计的。我们希望保留kdb+的高性能以及语言强大的表达和分析能力,但同时使用上能像python + SQL这般简单(kdb+的q语言过于晦涩难懂),最重要的是做成一个真正的分布式系统,能使用pc服务器做集群(kdb+是一个单线程单任务系统,往往在一个高性能机器上部署多个进程解决海量数据的问题,或者通过引入简单的网关来实现原始的集群功能)。

目前发布的版本,性能上已经超越kdb+,请看另一位知乎大侠的实测 Kdb+有可能不再是最快的时序数据库?DolphinDB安装部署,以及语言本身的简洁高效,请参考教程和例子。

DolphinDB教程:dolphindb/Tutorials_CN

DolphinDB开发手册:DolphinDB User ManualDolphinDB用户手册

DolphinDB编程例子:DolphinDB

虽然目前还是一个新系统,但函数库已经足够丰富,在所有时序数据库中可以说是最全的。同时也提供了常用语言的api,包括python,R,c#,java,json,excel,c++。有些功能若没有,可以在第三方语言和系统中完成。




  

相关话题

  发行法定数字货币 (CBDC) 有怎样的经济收益?又有哪些政策、技术挑战? 
  如何看待zhihurank这个网站?基于网站数据可以得到怎样的信息? 
  对于初学者来说:“市场行情不可预测” ,这句话几乎是不可挑战的真理,那真正的高手心底也如此认为吗? 
  银行为什么鼓励信用卡分期还款? 
  次贷危机是怎么回事? 
  散户自己摸索股票真的走不出来吗? 
  为什么许多事都会归咎于资本? 
  「独立宽客」是否可行? 
  资本主义国家为何要遏制社会主义的发展? 
  在杭州该买别墅还是租别墅? 

前一个讨论
Mac上有些软件无法禁止开机启动怎么办?在“登陆项”里面没有它的选项,无法删去,比如Junos Pulse。
下一个讨论
二战欧洲战场东线有多恐怖?





© 2024-11-08 - tinynew.org. All Rights Reserved.
© 2024-11-08 - tinynew.org. 保留所有权利