一种采用可变步长跳表的数据存储系统及方法技术方案

技术编号:29135431 阅读:20 留言:0更新日期:2021-07-02 22:31
本发明专利技术涉及行情数据技术领域,具体来说是一种采用可变步长跳表的数据存储系统及方法,包括若干链表节点和若干层不同步长的跳表层,每个链表节点设有指向前一个链表节点的前序指针和指向后一个链表节点的后序指针;每一层跳表层以可变步长的若干链表节点作为跳表节点,每个跳表节点设有步长记录值以及根据步长记录值的数值指向所述的跳表层的后一个跳表节点的后序指针。本发明专利技术对逐笔行情数据内容的存储、查询、回补方式的优化改进,针对逐笔行情数据的数据量大、有序队列等特点以及分段查询、回补数据的需求,创新设计一种可变步长的跳转表,改进逐笔数据存储和查询方法,解决了逐笔数据“查询慢、回补难”的问题,有助于优化市场行情服务的性能。

【技术实现步骤摘要】
一种采用可变步长跳表的数据存储系统及方法
本专利技术涉及行情数据
,具体来说是一种采用可变步长跳表的数据存储系统及方法。
技术介绍
沪深市场的逐笔行情数据包括在交易时段生成的逐笔委托、逐笔成交的行情内容,每日的数据量十分庞大。目前上海市场逐笔成交每日约2400万笔,单只股票最高成交数约27万笔,深圳市场逐笔成交每日约4800万笔,单只股票最高成交数约75万笔,深圳市场逐笔委托每日约5500万笔,单只股票最高成交数约800万笔。而逐笔数据常用于展示、量化回测等场景,随着证券市场的发展,成交量日益增大,投资者更加成熟,对逐笔快速查询的需求也越来越大。如今市场上主流的行情软件皆为投资者提供了个股全天的逐笔数据展示服务,导致客户端存在大量根据区间段查询的需求;同时为了保证数据完整性,服务端若在接收逐笔数据时发生丢包现象,需要向上游请求数据回补,并把回补的数据正确插入到有序的逐笔数据队列中。因此,针对数据量庞大且有序的逐笔数据,服务端要解决两个难题,一是如何快速处理终端的数据请求,定位到指定区间段的逐笔数据并提供给投资者;二是如何将回补的数据插入到逐笔数据队列中,且不影响服务质量。目前行业内大多行情服务系统都采用高速缓存组件,比如共享内存、Redis来存储逐笔数据,这种方式可以满足区间段查询的需求,但查询的效率仍有优化空间,且处理回补数据时会产生数据移位,存在较大的性能瓶颈。因此,为保证逐笔数据服务的安全性、及时性和连续性,需要设计一种采用可变步长跳表的数据存储系统及方法,从而优化服务品质,满足市场需求。
技术实现思路
本专利技术的目的在于解决现有技术的不足,提供一种采用可变步长跳表的数据存储系统及方法,解决数据查询慢、回补难的问题,尤其适用于证券期货业行情数据中的逐笔数据。为了实现上述目的,设计一种采用可变步长跳表的数据存储系统,包括若干链表节点和若干层不同步长的跳表层,每个链表节点设有指向前一个链表节点的前序指针和指向后一个链表节点的后序指针;每一层跳表层以可变步长的若干链表节点作为跳表节点,每个跳表节点设有步长记录值以及根据步长记录值的数值指向所述的跳表层的后一个跳表节点的后序指针。。优选地,对于所述的若干层不同步长的跳表层,第一层的跳表层的步长为N1,第N层的跳表层的步长为Nn,其中N、N1、Nn为自然数。优选地,所述的采用可变步长跳表的数据存储系统包括存储器和处理器,所述的存储器用于存储所述的链表节点、跳表层及数据;所述的处理器用于根据链表中链表节点的增加或插入,相应修改所述的链表节点、增加所述的跳表节点、变更所述的步长记录值的数值。本专利技术还涉及一种数据存储系统的数据存储方法,通过所述的采用可变步长跳表的数据存储系统进行数据的存储。优选地,新增的链表节点按序链接于现有的链表末,插入的链表节点链接于链表中。优选地,根据链表中链表节点的增加,相应修改所述的链表节点及增加所述的跳表节点。优选地,根据链表中链表节点的插入,相应修改所述的链表节点、增加所述的跳表节点并变更所述的步长记录值的数值。优选地,当所述的跳表节点的步长记录值大于设定值时,将所述的跳表节点分裂为两个跳表节点。优选地,当所述的跳表节点的步长记录值的增加至大于原始的步长记录值的一半时,将所述的跳表节点分裂为两个跳表节点。本专利技术还涉及一种采用所述的采用可变步长跳表的数据存储系统的数据查询方法,根据待查询的数据所处的链表节点的位置,通过与所述的链表节点最接近的跳表节点对所述的链表节点进行定位并进行数据的查询。本专利技术同现有技术相比,其优点在于:本专利技术对逐笔行情数据内容的存储、查询、回补方式的优化改进,针对逐笔行情数据的数据量大、有序队列等特点以及分段查询、回补数据的需求,创新设计一种可变步长的跳转表,改进了逐笔数据存储和查询方法,解决了逐笔数据“查询慢、回补难”的问题,有助于优化市场行情服务的性能。附图说明图1示例性示出了逐笔数据的示意图。图2示例性示出了若干层跳表层的示意图。图3示例性示出了可变步长的跳表结构的示意图。图4示例性示出了实施例1的示意图。图5示例性示出了实施例2中场景一的示意图。图6示例性示出了实施例2中场景二的示意图。具体实施方式下面结合附图对本专利技术作进一步说明,这种装置的结构和原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。本实施方式提供一种采用可变步长跳表的数据存储系统,包括若干链表节点和若干层不同步长的跳表层,其中,每个链表节点设有指向前一个链表节点的前序指针和指向后一个链表节点的后序指针;每一层跳表层以可变步长的若干链表节点作为跳表节点,每个所述的跳表节点设有步长记录值以及根据步长记录值的数值指向所述的跳表层的后一个跳表节点的后续指针。所述的采用可变步长跳表的数据存储系统尤其适用于证券期货业行情数据中的逐笔数据,参见图1所示,所述的逐笔数据是指证券期货业行情数据中的逐笔委托、逐笔成交类行情,与快照类的切片数据不同,这类数据揭示了全天交易中整个市场每一笔委托、撤销与成交信息,因此这类数据具有数据量庞大、时序排列等特性。具体地,在本实施方式中,直接存储逐笔数据的是双向链表结构,每个链表节点由last(前序指针)、value(逐笔数据)和next(后序指针)组成。链表节点的last指针指向前一个链表节点,next指针指向后一个节链表节点。所以,从每个链表中的链表节点开始,都可以很方便地顺序访问它的前序及后序链表节点。在一般情况下,随着每一笔逐笔数据的增加,链表会新增链表节点并链接在末尾,即把最后一个链表节点的next指针指向新的链表节点,把新的链表节点的last指针指向最后一个链表节点。如果发生逐笔数据回补操作,则插入新的链表节点到链表中间,先顺序找到要插入的位置,再修改相连的两个链表节点的指针信息。以上述的双向链表结构作为逐笔数据存储的基础,能满足数据节点的正常新增和回补需求,也方便了从任意位置的链表节点向前序、后序访问链表节点数据的需求,但有时用户需要访问的只是一段范围内的逐笔数据,单纯的双向链表就显现出相应的劣势了。例如,当用户需要访问第500笔成交到第600笔成交之间的逐笔数据,此时原始的双向链表只能先从第一个链表节点开始按顺序寻找到第500个链表节点,再顺序获取所需的逐笔数据信息。因而,为了解决快速定位逐笔数据位置的需求,参见图2所示,本实施方式增加了步长大于1的多层链表作为原始链表的索引,构建了多层跳表层,从而组成一种跳表的数据结构。每一层跳表层以设定的不同步长建立跳表节点,并建立与该层跳表层的下一个跳表节点的对应关系。而每个跳表节点除了last(前序指针)和next(后序指针)之外,还设有pointer(下层指针)。跳表节点的last指针指向前一个跳表节点,next指针指向后一个跳表节点,而pointer指针则指向下一层级跳表层的跳表节点。如第一层跳表层的步长为本文档来自技高网
...

【技术保护点】
1.一种采用可变步长跳表的数据存储系统,其特征在于包括若干链表节点和若干层不同步长的跳表层,其中,/n每个链表节点设有指向前一个链表节点的前序指针和指向后一个链表节点的后续指针;/n每一层跳表层以间隔可变步长的若干链表节点作为跳表节点,每个所述的跳表节点设有步长记录值以及根据步长记录值的数值指向所述的跳表层的后一个跳表节点的后序指针。/n

【技术特征摘要】
1.一种采用可变步长跳表的数据存储系统,其特征在于包括若干链表节点和若干层不同步长的跳表层,其中,
每个链表节点设有指向前一个链表节点的前序指针和指向后一个链表节点的后续指针;
每一层跳表层以间隔可变步长的若干链表节点作为跳表节点,每个所述的跳表节点设有步长记录值以及根据步长记录值的数值指向所述的跳表层的后一个跳表节点的后序指针。


2.如权利要求1所述的采用可变步长跳表的数据存储系统,其特征在于对于所述的若干层跳表层,第一层的跳表层的步长为N1,第N层的跳表层的步长为Nn,其中N、N1、Nn为自然数。


3.如权利要求1所述的采用可变步长跳表的数据存储系统,其特征在于包括存储器和处理器,所述的存储器用于存储所述的链表节点、跳表层及数据;所述的处理器用于根据链表中链表节点的增加或插入,相应修改所述的链表节点、增加所述的跳表节点、变更所述的步长记录值的数值。


4.一种数据存储系统的数据存储方法,其特征在于通过如权利要求1-3任一所述的采用可变步...

【专利技术属性】
技术研发人员:陈一默谌鹏朱贤高昀王鹏刘远远
申请(专利权)人:上证所信息网络有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1