kdb+不仅仅是内存数据库,当然如果数据只保存在内存中而从未写入到磁盘,是需要用命令写入磁盘的。 Q:Is kdb+ used only as an in-memory database? A:No. Kdb+ provides a full relational database management system with time-series analysis that handles data in memory as well as stored data on disk. ... itfin说过:
请教问题: 如果我想把2000支股票的历史数据读入KDB+,是每支股票建立一个table较好,还是所有的股票数据放进一个table? KDB+支持并发访问吗?例如,我从KDB取第一支股票的历史数据的同时,还没取完时再同时发请求取第二支和第三支股票的数据。支持异步存取吗?
https://code.kx.com/trac/wiki/Cmdline 使用-p -XXXX 的方式,可以实现多客户端的并发查询。 使用-s XX 的方式,在用户代码级可以实现多线程peach并发,在kdb+引擎级可以实现各分区的并发查询和结果汇总(与google的mapreduce类似,但如果只有单磁盘则瓶颈在磁头IO无法实现提速)。 kdb+在线程级没有做锁和同步处理,所以不要尝试做并发插入操作,否则可能使程序崩溃。
kdb+不是for散户的平台,也不能简单地把它看成是个服务器。进入kdb+的领域基本上意味着要沿着机构业务的路径发展,换言之就是所谓的专业化。如果个人在业务和技术上同时都有相当的能力,且愿意投入5年以上的时间深入钻研,这会是一个很有前途的方向,否则对个人来说只不过是浪费时间。
好象国内机构用kdb的少之又少。恐怕找这方面的工作不是件容易的事。 SQLite是嵌入到应用程序内部,不是独立的服务器。假如我要关掉测试程序,改几行代码,再打开程序,又要重新装入历史数据,装入历史数据是个很费时间的过程。如果装入的数据很庞大,还要根据使用的频率,定期从内存中清除不常用的数据。如果再考虑并发查询,分布式存储等等,好象用数据库方案较好。 我又查了资料。 key-value数据库:redis, Tokyo Cabinet, memcached. 其中redis, Tokyo Cabinet不支持Windows服务。这些数据库的数据也相当于内存中,查询速度超快。
SQLite是轻量级的,方便附加到自己的软件中,散户个体应用在交易执行方面我觉得数据量不会大,一般够用了。 当然看你上面的话,你是打算用来存放海量的历史数据,可能做统计或者backtest的用途。那轻量级的数据库可能就不满足。流行的商业数据库都没问题,尤其支持OLAP好的那些。 redis, Tokyo Cabinet, memcached 这些都没见过,期待Toby试后和大家分享一下心得 :)
SQLite是不错。很小巧。它可以嵌入到某一程序中。但与不用它有何区别。自己把数据放在内存不就行了。 我现在要把所有A股的日数据从文件读入内存,而且过一会有个新的想法后,再改改程序,再次读入内存。我可以把它做成WINDOWS SERVICE的形式,一直在内存里,但我想试试数据库的方式。为何关掉程序也要驻留内存呢?原因是读入这些数据要花费几分钟的时间。时间太久了。 我要用的数据也不算海量,但要预先设计好支持大数据量。统计与backtest肯定是要的啦。流行的商业数据库太庞大,配置复杂。远没有直接从文件读取来得方便。而且不是内存数据库。 由于redis, Tokyo Cabinet不支持WINDOWS,我没去安装。redis支持 LIST,SET等数据结构的直接插入。Tokyo Cabinet更稳定。支持memcached 协议。数据库太多了,这里只提到这几个,都算是键值数据库,数据放在内存中,超过一定数量后,不常用的自动存入硬盘。支持多线程并发。最大的特点是插入数据与查询数据超快。 我安装了memcached 。还不错。使用很简单。可以把对象直接存进去(set),可以查询(get)。就这么简单。这样如果我把A股所有的日数据全部存进这个内存数据库,下次程序再启动来就不用花几分钟从硬盘读取文件了。memcached 默认内存60M,大于60M就缓存到硬盘。 数据库分为基于行的库,基于列的数据库,键值数据库,对象数据库。传统的关系数据库属于基于行的。
如果要求不高,可以解决的,如: 1)退出了再进 手工重启或用监控软件监控一退就重启。 2)通过修改系统日期让它在“未来”启动,现在减去未来得到一个小于2小时的负数。可以用SYDAY等小工具帮忙。 大智慧的所有A股日线数据用kdb+格式保存的话大概不到200MB(约480万条记录;不知道是否完整),全部加载到内存需要花费不到1秒的时间。有兴趣的话可以用我发在re版的q代码把大智慧数据导入试试。 kdb+应该属于网络数据库类型吧.
真是太感谢大侠的指点。 1. syday试验成功。貌假KDB+有3个月的使用期。不知如何解决。我的好 我用SYDAY启动后,如果设成昨天的日期,过几秒就会退出。如果设为明天的日期,则不会退出。如果设为4月6号,也会退出。 KDB+ 2.6 2010.01.05 Copyright (C) 1993-2010 Kx Systems w32/ 1()core 1021MB zha49293 szhdx-dt15492 10.86.56.138 PLAY 2010.04.05 (是不是我的到期时间为4月5日???) 2. 我有时间要研究您的Q代码