证券行业有很多信息系统依然在使用foxbase数据库。
深交所的快照行情、交易信息的数据传输现在是数据流方式。2016年之前,这些信息以foxbase的数据库操作的dbf文件为主。
上交所的行情文件、交易信息曾经改由dbf文件改为数据流方式,技术原因并不是很成功。为了保持系统的稳定性,后来采取了折中的方式改为txt格式的文本文件。
截止目前,中登公司发送给各结算人的数据还是dbd文件。除此之外,券商各信息系统之间数据交互,使用dbf文件方式并不少见。
小编进入公司编写的第一个系统是行情文件转发,用作公司营业部的备份行情源。很多人估计不知道,交易所发给券商的行情文件,不是义务劳动,是按接收端的个数收费。没记错的话,一个接收端一年要交纳不低于10万的服务费。券商是不差钱,但为了备份的行情每年交近千万的费用,也会肉疼的。
所谓行情文件,dbf格式和txt格式文件。转发程序的功能逻辑比较简单,在总部部署服务端程序不停扫描接收到的交易所行情文件的变化,并将变化的信息实时同步到营业部的接收客户端。
实现时遇到最大的难题是带宽问题,总部到营业部的专线带宽只有2M,行情传输还需要与其他应用争夺有限的带宽资源。每个快照的周期是3s,文件大小近2M,直接传输根本就不可能。通过观察文件变化情况,每次快照变化的数据约有1M左右,依然是无法传输。
要想传输,只能将对比出来的数据,在有限时间内(1s)大比例压缩,才有可能正常。哈夫曼压缩比例小,zip压缩时间长,一时工作陷入僵局。偶然试验发现,先哈夫曼压缩,然后再zip压缩能完美解决问题。
解决的底层传输这个难题之后,第一版程序出现新的难题。测试时,发现数据传输过去,源端与目标端的数据断面能做到最终一致。目标端读取股票数据时,经常出现文件读取错误的情况。工作再次陷入僵局,开技术讨论会时,项目组士气非常低落。
传输时间、空间都没有问题,内容出现问题,只能从文件内容结构入手了。也正是掌握了dbf文件内容结构,才让我们取得了最后的成功。
经过仔细分析之后,得知foxbase的dbf格式数据文件的具体细节。dbf文件可以看成格式化的文本文件,由三部分组成,文件头信息部分、表头信息部分和数据内容部分。其中,最重要的是文件头信息部分,包含文件的校验信息。应用程序读取每次读取文件是先校验文件头信息是否正确。
由于读和写是异步操作,造成校验失败的情况非常频繁。此外,再根据数据内容变化情况做进一步分析,文件大小整个交易日不发生变化,有些字段的值一直不变。最终确定了差异化对比策略,对比的粒度是每行数据,也就是一只股票的完整信息。
至此所有问题得到解决。程序在2016年上线之后,已经稳定运行了近五年的时间。期间曾与某行业开发商做过对比,同等条件下,我们的运行效率是高于他们的。
能为公司每年节省了那么多费用,领导发自内心的高兴。各项荣誉自然不在话下了。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有