1秒内多次的ticket数据密度*若干年的数据时间,是一个十分恐怖的值。 为了让我以后的策略能够在这么多数据中快速检索,我想来想去,还是针对交易市场的特征,自己做一个数据库。 经过3周的琐碎时间,经历了2个版本,现在终于小有成果了~~ 刚跑了一个测试,存储400000000个数据点,总数据容量为305MB。 存储这么多数据用掉了38.97秒。 把这么多数据读取一遍,用了3.985秒。 在这个数据规模中随机检索10000次,耗时2.977秒。 最后是压缩比差不多为100:1,也就是305MB的数据只用了3.0M就存下了~~ 不过测试数据是生成的,也许规律性太强了~不知道实际数据下表现会如何~ 下一步开始导入从CTP接收的数据,然后实现自己的图表UI~然后就可以开始研究点策略了~
不压缩存储,容量就是305M。 存储时间肯定会快很多,我估算下差不多是写入3秒左右。 读取时间未必会快,我估计应该也是3-4秒左右的样子。 但是,我的数据结构就是按照压缩后还能快速检索设计的,不压缩就没意义了。
看了下这个东西~检索的功能比我要强大许多。 并且检索速度上,它只要10ms,而偶的实现需要300ms,高了一个数量级~ 它的高级功能对我来说没啥用,偶只需要一个能快速提供任意数据密度,以及任意时间段的交易数据的工具即可~ 偶实现的特点是内存使用很小,基本上任何时候都只占用几兆内存,几乎全部直接基于磁盘操作,并且支持高度压缩过的数据,数据文件规模可以上T。 毕竟,偶需要考虑VPS环境,许多VPS环境内存很扣的~
最近一直在折腾把以前用CTP收的数据导入到新写的数据库的问题。 总是会卡死在内存不足上,我始终以为是内存泄漏等问题,不然不会用掉这么多内存...百思不得其解... 今天去拍了跟2G的内存之后,忽然想明白了原因~~因为我的开发环境是32位系统,而运行环境受限于CTP的限制,是64位系统。同样的代码,同样的数据集,在64位系统上比32位系统多用了将近一倍的内存... 因为Python对象的存储过程中大量运用了指针,因此Python的数据密集型应用在64位系统上内存占用会很明显。这样看来必须构造一个hybrid环境了,自己的机器还好说,VPS的内存相对而言实在是太少了,禁不起这么浪费...