手持设备中股票软件数据存储方案的设计
2017-04-14上海银天下科技有限公司许文伟
上海银天下科技有限公司 许文伟
手持设备中股票软件数据存储方案的设计
上海银天下科技有限公司 许文伟
就股票软件而言,它的历史数据有着自身的一些特点。文章通过对相关数据的特性,以及线性表与B+树两种方案进行分析,发现两种存储方案都符合手持设备中股票软件的相关要求,并从性能和资源方面对二者的优劣进行了比较,希望本研究可以作为广大研究者的参考。
手持设备;股票软件;数据存储;存储方案;方案设计
引言
在目前的科技影响下,一些手持设备的出现,为人们的工作于生活带来相当大的便利。比如数据图片、股市信息的接收方面。对于股票软件来说,对相关硬件与运行环境的要求通常会比较高。文章通过对线性表、B+树进行分析,并在相关方面做了比较,可以从中得知,在实际应用过程中,应当结合相关实际情况来对储存方案进行选择。
1.股票软件相关数据特性的分析
在当前背景下,证券投资行业发展速度较快。对于这方面数据的类型而言,一般分为以下几种:分时走势、即时成交、历史日线、个股F10资料和财务公告等方面的信息。在股票软件的开发过程中,如果要使软件更加完整,不但需要把实时的相关交易行情提供给广大用户,还要把一些分析历史成交数据的方法提供给广大用户,这样才能符合用户的各种需求。
所以,在软件数据中,大概有两种信息需要完成储存处理。一种是当天的分时走势与实时行情方面的信息,还有一种是历史日线、F10资料、财务公告方面的信息。就第一种数据的储存来讲,要想合理地节约空间,可以选择字节流的手段,把它储存在内存里面当作刷新方面的处理功能,但只能在短时周期里进行。而第二种数据信息则应当存进SD卡里面,它需要进行长时期的存放。[1]对于财务公告信息、F10资料信息而言,对其储存方面的定义相当明确,就是存为一些小文件。对于历史日线方面的数据信息则需要在SD里进行储存,它的内容显得较长,应当长期存留。
2.手持设备中股票软件数据存储方案设计的策略
2.1 线性表存储分析
2.1.1 线性表的结构分析
对于线性表来说,它是一种较为常见的数据结构,其结构比较简单,顺序储存的结构是在软件的内存里面,建立起可以联系储存的空间。然而,这片空间在大小上有较为严格的要求,它不能够比顺序表所具有的长度还小。同时,在连续空间里面,它的第一个位置应当储存线性表里面的首个元素,第二个位置储存第二个元素,依此类推,直到线性表的中元素储存完毕为止。
由此可得,在线性表上面,如果两元素在逻辑关系方面比较接近,那么他们的物理存储位置也会比较接近,这是线性表结构中循序储存比较明显的特征。如此一来,根据这个特点,在相关的储存单元里面,对于每一个数据方面的元素而言,要想将它和初始位置的相对位置确定下来,就显得非常容易了。
假如在线性表上,元素是(a1,a2,…,an,),其中,a1是线性表上的第一个元素,它的内存地址是LOC(a1)。在计算机了面,每一个现行表上的元素都会占有C个储存单元。而第i个远的的初始位置LOC(ai)=(i-1)*C+LOC(a1)。在这个公式里面,n≥ i ≥1。由此可见,当采用随机访问的时候,可以使用顺序表来完成。对于它的顺序储存结构而言,就是进行随机储存的一种结构。
2.1.2 线性表结构的纯出方案分析
对于日线数据信息的储存而言,它需要在SD卡中进行合理保存。在对这些数据信息进行读取的时候,需要通过相关的文件系统,对SD卡进行相应的操作才能完成。[3]同时,这种情况下的读写操作,随机性比较强。在对股票历史相关的日线数据信息进行储存时,可以选择线性表顺序储存结构,这种储存方式能够使读写方面的操作速度更加完善。
在File header的功能方面,它在线性表中起着重要作用,能够储存股票代码的索引表,初始化的值都是零。在股票代码的储存数量方面,如果2048个就是最大限度,那么,每一个代码就需要4byte。如此一来,它的索引表最终需要的储存空间就是8Kbyte。
在Code Block的功能方面,主要是用来储存每个股票储存日线数据块的。对于它储存的数据方面来说,应该严格执行相关的顺序来进行储存,即股票代码的索引表的顺序。同时,在股票代码的数量方面,File header同Code Block也是一样的。如此一来,每一个数据块同File header里面的代码存在着重要联系,它们在存储和逻辑顺序方面具备一一反应的特点。
在Date Block的功能方面,它是将一支股票特定的某天的日线数据信息进行储存,而它的顺序就是按照年月日方面的时间顺序来定的。在时间限制方面,需要根据实际当中的需求和相应的资源条件来确定它的范围大小。在每一个日线数据块里面,Date Block都是24byte。
而在同一个股市里面,可能会出现这样的情况。那就是有些股票的代码是一样的,然而股票却不是一样的。[4]在这种类型的日行文件里面,股票的最大数量是2048个,且时间方面的最长范围是19年(不含双休)从而,就可以就此将每一个文件大小计算出来。其算法就是260×19×24×2048+2048×4,最终结果就约等于247nyte。在这种算法面,股票代码的索引表是前面的8Kbyte。由此可得,在储存深市和沪市的日线文件时,大概需要占据的空间是495Mbyte。
2.1.3 标志变量列表方面的分析
根据前文中的内容可以得知,在同一天时间里,日线数据可以进行循环滚动地发送。对于一个股票来说,在同一天时间里面,它的日线数据可以不用刷新。因此,需要每次收到日线数据后,应当先对日线数据进行判断,分析后觉得有必要再进行写入。在这个列表里面,File header和Data flag 在储存顺序方面,表现出来的是一样的。这样一来,就能够同Code Block形成一一对应了,并用来标志Code Block有没有完成当天的写操作步骤。另外,每一次进入股票软件时,都需要把列表进行复位,并且全部置零。
2.1.4 读写方面的原则
只有在终端界面上,用户查看股票的K线图时,才有从SD里面把相关股票全部日线数据读出来的必要。同时,在这种情况下进行的读取,可以不用进行周期刷新。由此可知,读取数据的相关措施就是:对于股票代码而言,需要现在索引表里面找到与之相匹配的代码位置,并把Code Block相关的偏移地址给计算出来,然后按照这个地址,就可以把全部日线数据读出来。
对于写数据来说,需要现将相关的日线数据解析出来以后,再进行这个步骤。并且把相关数据信息储存到SD卡里面。对于股票的日线数据而言,凡是支持的数据都要进行保存,这使得数据量非常庞大。应当对这些数据进行一定的优化操作,从而使写操作不会那么频繁。其措施主要是,将一个写循环缓冲定义到内存,如果缓冲区域已经被日线数据占据,并在对另一支股票的日线数据进行接收操作时,就需要依靠该列表的作用,判断这支股票的日线数据有没有写进去。[5]如果没有完成,就需要进行写操作,并在列表里面把data fl ag置位,并标注清楚,不然的话,缓冲区就会被新的数据所覆盖。
2.2 B+树结构存储分析
2.2.1 B+树的原理分析
对于B+树结构来说,其实就是从B树变化而来,在查找方面,与B树有很多相似的地方。在业界店里面,储存着与记录相关的数据信息。在查找过程中,如果待查关键码在上层发现,且不停下,可向下将叶节点层关键码找到。除此之外,叶节点能够组成有序链表,能够根据关键码的次序来遍历所有的记录。由此可得,在范围搜索方面,B+树显得较为合适。并且,它的实际应用很多,如随机和顺序检索等。
2.2.2 存储方案分析
在SD卡里面,可以分配一个“/stock”的专用目录,对股票的数据进行储存。如果是财务相关的公告,或者是F10的资料,可以根据各自的文件名称,储存这个目录下面。但是,在SD卡中,其日线数据就会组织为2个文件了。即数据记录文件和索引文件,同时,SD卡中的文件系统可以被确认成FAT16。磁盘空间被FAT划分开来,并将簇当作是单位。[6]对于一个磁盘簇长度而言,它相当于512byte。对于索引文件内容来讲,通过B+树的索引,相应的数据记录信息储存到数据文件里面,并且应4byte对齐。
在数据文件里面,相关的组织方式根据定长记录来决定,每一条记录和日线数据项都要形成对应关系。针对于日线数据来讲,它缺少删除节点的选项,储存是依靠一点点积累起来的。但它具备更新与插入选项,这样,进行也快管理的时候就方便多了。对于管理也快非配的对来说,并不要求去进行维护,只需要把递增值记录下来就行了。
在日线数据的相关文件里面,头部位置空出一个记录的长度来,以便可以对个数等信息和标志进行记录。
对于索引指针来说,它的长度一般为4byte。在长度方面,它完全符合相关要求。它可以对4G个单元进行索引。通俗一点的说法为,数据项大致约为数百年,所以从长度方面来看完全不用担心。
如果叶节点的扇出系数假设成56,不是叶节点的是57,将沪深股市2046支股票进行计算,大约能够有四层B+树,差不多可以储存19年的日线数据占据的空间大概是330Mbyte。就四层树来说,如果要得到查询的结果,执行不超过五次的读操作就能够实现了。[7]针对于索引文件时,一般都为整个节点快方面的操作。如果是单个操作的话,所涉及到的节点最多不会超过三个。
3.结束语
综上所述,对于手持设备这种股票软件的应用要求而言,上述方案均能够满足,只是二者相比之下,各有优势和劣势,主要表现在各自的性能发挥和资源的损耗方面。首先,在时间方面,经过实践验证,将22天日线数据写入,其大小差不多是528byte,如果使用线性表来进行操作,时间大概为9秒,B+树则远远低于先形变的方案,只要十来毫秒就可以完成。其次,在空间的占用方面,条件一样的情形下,线性表为495Mbyte,B+树要少得多,只需要330Mbyte。但是,在实际的应用过程中,应当从股票软件等方面的具体情况出发,选择于实际更相吻合的方案来进行操作。
[1]刘井莲,赵卫绩,文海霞.基于关联规则的股票分析软件的设计与实现[J].通化师范学院学报,2012,08:30-32.
[2]悠兰.自信满满做一生的赢家——对话汉诺威环球财富有限公司创始人、股票交易算法软件的研发者易革新[J].中国高新区,2015,05:66-67.
[3]祁建宏,达文姣.线性表成组链式存储结构研究[J].制造业自动化,2017,02:104-105+119.
[4]耿庆田,狄婧,常亮,赵宏伟.基于B+树的数据索引存储[J].吉林大学学报(理学版),2013,06:1133-1136.
[5]长孙妮妮,张毅坤,华灯鑫,邹子夏,陈浩.一种基于B+树的混合索引结构[J].计算机工程,2012,14:35-37+40.
[6]梁俊杰,肖瑶,余敦辉.MapReduce框架下基于B+树的高维索引[J].计算机应用研究,2016,03:706-710+715.
[7]杨万清,戚欣革,栾敬钊,李振威,姜学朴.电力大数据存储方案设计[J].东北电力技术,2015,12:41-43.