百科问答小站 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++。有些功能若没有,可以在第三方语言和系统中完成。




  

相关话题

  有个荐股群每天晚上都短信通知带领建仓了某个股票说第二天会高开出货,第二天的确高开5点以上是怎么做到的? 
  steam上有没有类似金融帝国 这种游戏? 
  怎么看美国司法部对德意志银行开出的 140 亿美元罚单? 
  假如禁止所有公司上市会发生什么事情? 
  为何基金经理大多研究员出身?而不是交易? 
  如何看待「经济学家建议央行多印 2 万亿,用 10 年多生 5000 万孩子」? 这种方法可行吗? 
  蚂蚁科技集团股份有限公司暂缓科创板和 H 股上市,对投资者会有哪些影响? 
  为什么内资券商的投行部就老出差趴项目上,而外资就很少? 
  瑞幸咖啡将与美国证券集体诉讼达成和解,瑞幸翻盘了吗?还有哪些信息值得关注? 
  如何看待网传「百亿私募离职基金经理应聘买方分析师,仅要求1万5到2万月薪」? 

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





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