基于自定义哈希的双源行情去重方法和系统与流程

文档序号:25721913发布日期:2021-07-02 21:06阅读:106来源:国知局
基于自定义哈希的双源行情去重方法和系统与流程

本发明涉及金融领域行情服务技术,具体涉及一种基于自定义哈希的双源行情去重方法和系统。



背景技术:

作为金融领域中的行情服务端系统,行情实时数据的及时、可靠,行情历史数据的正确、完整是系统的核心要求。行情服务端作为行情服务的提供方,对移动端客户提供行情的推送和查询功能,同时,也需要从上游行情源获取实时的行情推送数据。

传统在系统运行过程中,是采用单行情源接收行情的模式,由于行情源故障或网络故障等原因,导致系统的行情推送和计算业务受到影响,且由于行情数据的特殊性,无法做到系统的即时恢复,对市场客户造成了一定的影响。可见上游行情源的稳定性在一定程度上成为行情服务端稳定性系统的重要影响因素,如何规避上游行情源的异常情况成为行情系统长期稳定运行需要解决的问题。



技术实现要素:

以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。

本发明的目的在于解决上述问题,提供了一种基于自定义哈希的双源行情去重方法和系统,避免单点行情源的不稳定性,为行情源的稳定性提供更高保障。

本发明的技术方案为:本发明揭示了一种基于自定义哈希的双源行情去重方法,方法包括:

步骤1:采用双路接入的方式同时接收两个行情源的行情实数据,当订阅节点接口收到行情数据后,根据行情数据的数据更新时间的分钟值是奇数还是偶数来确定缓存数组的索引值;

步骤2:根据行情数据的合约名称计算哈希值,以该哈希值为缓存数组的索引,在缓存中获取对应的合约处理类,如果合约处理类为空,则初始化缓存空间并将数据记录写入对应的缓存位置,如果合约处理类存在,则重定位缓存数组的索引值;

步骤3:根据找到的缓存数组索引的数据更新时间和接收到的行情数据的数据更新时间是否相同,来判断接收到的行情数据是重复数据还是新的数据。

根据本发明的基于自定义哈希的双源行情去重方法的一实施例,步骤2进一步包括:

根据行情数据的交易所类型的不同对合约名称进行对应的处理,得到合约名称对应的哈希值;

获取到该合约的哈希值后,以该哈希值为缓存数组的索引,在缓存中查找是否存在对应的合约处理类;

如果不存在对应的合约处理类,则新建合约处理类并将该新建的合约处理类的指针返回;

如果存在对应的合约处理类,则继续判断该合约处理类中的处理对象的合约名称是否与该合约名称相同,若相同则直接返回该合约处理类,若不相同则遍历相同哈希值的哈希结果集链表,依次判断是否存在该合约的处理对象,如存在则返回该处理对象,若不存在则新建该合约的处理对象,并把该新建的处理对象添加在哈希结果集链表的尾端。

根据本发明的基于自定义哈希的双源行情去重方法的一实施例,在根据行情数据的交易所类型的不同对合约名称进行对应的处理的过程中,若为期货类型,则对该合约名称做自定义的哈希计算,包括对合约名称按位取差,再将差值循环乘以给定的哈希种子值,将最终结果设置为short类型的哈希值,来保证哈希值在65535范围内;若为现货类型,则根据现货合约名称均为数字且不重复的特性,直接将合约名称转为对应整型值的哈希值。

根据本发明的基于自定义哈希的双源行情去重方法的一实施例,在步骤2中的重定位缓存数组的索引值的过程中,先根据数据更新时间计算出对应的分钟值,再比较数据更新时间的毫秒值,根据毫秒值确定数据在缓存数组中存放的索引位置。

根据本发明的基于自定义哈希的双源行情去重方法的一实施例,步骤3进一步包括:

如果缓存数组索引的数据更新时间和接收到的行情数据的数据更新时间相同,则认为接收到的行情是重复行情,对接收到的行情数据做丢弃处理;

如果缓存数组索引的数据更新时间小于接收到的行情数据的数据更新时间,则认为是新周期的数据,更新缓存数组的索引值;

如果缓存数组索引的数据更新时间大于接收到的行情数据的数据更新时间,则再继续判断接收的行情数据是否满足日期切换的状态:若满足隔夜状态则更新缓存数组索引值,反之则对接收到的行情数据做丢弃处理。

本发明还揭示了一种基于自定义哈希的双源行情去重系统,系统包括:

缓存数组索引确定模块,配置为采用双路接入的方式同时接收两个行情源的行情实数据,当订阅节点接口收到行情数据后,根据行情数据的数据更新时间的分钟值是奇数还是偶数来确定缓存数组的索引值;

合约处理模块,配置为根据行情数据的合约名称计算哈希值,以该哈希值为缓存数组的索引,在缓存中获取对应的合约处理类,如果合约处理类为空,则初始化缓存空间并将数据记录写入对应的缓存位置,如果合约处理类存在,则重定位缓存数组的索引值;

去重模块,配置为根据找到的缓存数组索引的数据更新时间和接收到的行情数据的数据更新时间是否相同,来判断接收到的行情数据是重复数据还是新的数据。

根据本发明的自定义哈希的双源行情去重系统的一实施例,合约处理模块进一步配置为执行以下的处理:

根据行情数据的交易所类型的不同对合约名称进行对应的处理,得到合约名称对应的哈希值;

获取到该合约的哈希值后,以该哈希值为缓存数组的索引,在缓存中查找是否存在对应的合约处理类;

如果不存在对应的合约处理类,则新建合约处理类并将该新建的合约处理类的指针返回;

如果存在对应的合约处理类,则继续判断该合约处理类中的处理对象的合约名称是否与该合约名称相同,若相同则直接返回该合约处理类,若不相同则遍历相同哈希值的哈希结果集链表,依次判断是否存在该合约的处理对象,如存在则返回该处理对象,若不存在则新建该合约的处理对象,并把该新建的处理对象添加在哈希结果集链表的尾端。

根据本发明的自定义哈希的双源行情去重系统的一实施例,合约处理模块执行的根据行情数据的交易所类型的不同对合约名称进行对应的处理的过程中,若为期货类型,则对该合约名称做自定义的哈希计算,包括对合约名称按位取差,再将差值循环乘以给定的哈希种子值,将最终结果设置为short类型的哈希值,来保证哈希值在65535范围内;若为现货类型,则根据现货合约名称均为数字且不重复的特性,直接将合约名称转为对应整型值的哈希值。

根据本发明的自定义哈希的双源行情去重系统的一实施例,合约处理模块执行的重定位缓存数组的索引值的过程中,先根据数据更新时间计算出对应的分钟值,再比较数据更新时间的毫秒值,根据毫秒值确定数据在缓存数组中存放的索引位置。

本发明对比现有技术有如下的有益效果:本发明对行情源采用双路接入的方式,同时接收两个行情源的行情实时数据,借此避免单点行情源的不稳定性。在系统内部通过去重模块对重复的实时行情做过滤处理。这样既可以通过双路的方式来为行情源的稳定性提供更高保障,而且对于系统内部其他模块和下游用户来讲,也只会收到去重后的唯一行情数据,对用户来说是透明的。

具体而言,本发明采用双路行情源接入的方式,对比单一行情源有更高的稳定性。通过自定义哈希算法,采用哈希+链表(也可以采用其他如再哈希、递增等冲突避免方式)的方式,可以快速且可靠地得到某个合约的哈希值,并支持不同特性合约名称的个性化处理,处理速度快,系统效率高。此外,本发明采用数据缓存来对不同更新频率的交易所数据做统一处理,并兼容不同交易时间的各种情况,通过缓存数据与实时数据的比较来判断数据是否重复,可准确过滤重复数据且无丢失情况发生。

附图说明

在结合以下附图阅读本公开的实施例的详细描述之后,能够更好地理解本发明的上述特征和优点。在附图中,各组件不一定是按比例绘制,并且具有类似的相关特性或特征的组件可能具有相同或相近的附图标记。

图1示出了本发明的基于自定义哈希的双源行情去重方法涉及到的数据流向示意图。

图2示出了本发明的基于自定义哈希的双源行情去重方法的实施例中的自定义哈希的算法流程图。

图3示出了本发明的基于自定义哈希的双源行情去重方法的实施例的流程图。

图4和图5分别示出了图3所示的方法实施例中的局部步骤的细化流程图。

图6示出了本发明的基于自定义哈希的双源行情去重系统的实施例的原理图。

具体实施方式

以下结合附图和具体实施例对本发明作详细描述。注意,以下结合附图和具体实施例描述的诸方面仅是示例性的,而不应被理解为对本发明的保护范围进行任何限制。

图1示出了本发明的基于自定义哈希的双源行情去重方法涉及到的数据流向。参见图1,首先,行情接收节点调用获取行情的api建立与行情源marketdis_1,marketdis_2的连接并订阅相关合约行情,订阅成功后,行情源marketdis_1,marketdis_2将实时的行情数据marketdata发到订阅节点,进入到订阅节点onmarkethandle接口。在订阅节点接口内部,根据marketdata的数据类型,分到各个交易所的数据处理模块(图示的交易所数据处理模块1~6)。交易所数据处理模块1~6内部首先有一个行情数据的缓冲队列queue来缓存最新的行情,在通过信号量及时将缓冲队列queue的数据取出来进行数据唯一性确认(dataconfirm)操作。数据唯一性确认操作对该笔合约的唯一性进行校验,如果未收到过该数据,则认为是新的行情数据,标示为通过校验,可进入后续业务流程(如行情推送、计算等),反之,如果发现该数据与缓存中已记录数据内容或时间戳重复,则认为其是重复数据,做丢弃处理。

图2示出了本发明的基于自定义哈希的双源行情去重方法的实施例中的自定义哈希算法流程,算法采用自定义算法计算合约名称对应的哈希值,对相同哈希值的合约采用链表方式存储为哈希结果集链表,算法根据合约名称返回该合约的合约处理类。

参见图2,以下是自定义哈希算法的具体实施步骤。

首先,根据行情数据的交易所类型(期货类型或者现货类型)的不同对合约名称进行对应的处理,得到合约名称对应的哈希值:

若为期货类型,则对该合约名称做自定义的哈希计算,本实施例对合约名称按位取差,再将差值循环乘以给定的哈希种子值,将最终结果设置为short类型的哈希值,来保证哈希值在65535范围内。

若为现货类型,则根据现货合约名称均为数字且不重复的特性,直接将合约名称转为对应整型值的哈希值。

获取到该合约的哈希值后,以该哈希值为数组的索引(合约处理类本身在一个数组中)在缓存中查找是否存在对应的合约处理类:

如果不存在对应的合约处理类,则新建合约处理类并将该新建的合约处理类的指针返回;

如果存在对应的合约处理类,则继续判断该合约处理类中的处理对象的合约名称是否与该合约名称相同,若相同则直接返回该合约处理类,若不相同则遍历相同哈希值的哈希结果集链表,依次判断是否存在该合约的处理对象,如存在则返回该处理对象,若不存在则新建该合约的处理对象,并把该新建的处理对象添加在哈希结果集链表的尾端。

图3示出了本发明的基于自定义哈希的双源行情去重方法的实施例的方法步骤,详细描述了收到行情数据后重复数据过滤的处理流程。以下是图3所示的方法流程的实施步骤的详细描述。

采用双路接入的方式同时接收两个行情源的行情实数据,当订阅节点接口收到行情数据后,首先进行数据更新时间的判断。

行情数据的数据更新时间定义如下。行情数据分为现货和期货两类,现货包含上交所和深交所,期货包含中金所、上期所、郑商所和大商所四家。其中现货行情更新频率为每笔/3s,而期货行情更新频率则为2-4笔/s。为适配各交易所数据更新场景,本实施例采用序号长度为480的缓存数组,每4个序号为一组,代表每秒钟可能的行情数,480的长度可分为120组,前0-239代表的60组负责处理偶数分钟的数据,后240-479则代表60组奇数分钟的缓存数据。总的数据缓存设为2分钟的窗口,认为两边行情源推送的实时数据更新时间差在2分钟的间隔内。

进一步参见图4所示,根据数据更新时间updatetime的minute分钟值,首先判断分钟值是奇数分钟还是偶数分钟,如果偶数分钟则对应0-239这240个位置,奇数分钟则对应240-479这240个位置,如果根据时间计算的位置索引index不在0-479这480个位置内,则返回错误,正确则继续执行。通过这一处理,基于行情数据的数据更新时间的分钟值确定了缓存数组中对应的索引值。

满足缓存数据中的索引位置判断的前提后调用自定义哈希的接口获取对应的合约处理类,通过图2描述的算法获取对应的合约处理类。如果合约处理类为空,则初始化缓存空间并将数据记录写入对应的缓存位置,如果合约处理类存在,则重定位索引值。

在重定位索引值的过程中,先根据数据更新时间计算出对应的某分钟索引位置,这个位置仍包含4个子位置,接着进一步比较数据的毫秒时间,返回对应的子位置。进一步参考图5所示,根据图4流程找到的4个序号一组的某一秒行情数据缓存区,进一步比较数据的毫秒值,毫秒值为行情数据的updatemilliseconds字段,因为交易所行情推送总是在固定的毫秒时间戳,如300ms,500ms,800ms。本实施例根据毫秒值准确定位该数据应存放的位置。如果毫秒值相等则保持索引值不变,如果毫秒值不相等则使得索引值+1。

之后,判断找到的缓存数组索引的数据更新时间(此时,我们找到了该分钟行情数据对应的位置,取该位置的缓存数据和接收的实时行情数据的数据更新时间updatetime字段进行比较,格式为hh:mm:ss)和接收的行情数据的数据更新时间是否相同,来判断接收到的实时数据是重复数据还是新数据:

如果相同则认为接收到的行情是重复行情,对其做丢弃处理;

如果缓存数组索引的数据更新时间小于接收到的行情数据的数据更新时间,认为是新周期的数据,更新缓存数组索引值;

如果缓存数组索引的数据更新时间大于接收到的行情数据的数据更新时间,则再继续判断接收到的行情数据是否满足日期切换的状态(因为部分交易所合约会有凌晨仍在交易状态):若满足隔夜状态则更新缓存数组索引值,反之则对接收到的行情数据做丢弃处理。

图6示出了本发明的基于自定义哈希的双源行情去重系统的实施例的原理。请参见图6,本实施例的系统包括:缓存数组索引确定模块、合约处理模块、去重模块。

缓存数组索引确定模块配置为采用双路接入的方式同时接收两个行情源的行情实数据,当订阅节点接口收到行情数据后,根据行情数据的数据更新时间的分钟值是奇数还是偶数来确定缓存数组的索引值。

合约处理模块配置为根据行情数据的合约名称计算哈希值,以该哈希值为缓存数组的索引,在缓存中获取对应的合约处理类,如果合约处理类为空,则初始化缓存空间并将数据记录写入对应的缓存位置,如果合约处理类存在,则重定位缓存数组的索引值。

合约处理模块进一步配置为执行以下的处理:

根据行情数据的交易所类型的不同对合约名称进行对应的处理,得到合约名称对应的哈希值,在这一处理中,若为期货类型,则对该合约名称做自定义的哈希计算,包括对合约名称按位取差,再将差值循环乘以给定的哈希种子值,将最终结果设置为short类型的哈希值,来保证哈希值在65535范围内;若为现货类型,则根据现货合约名称均为数字且不重复的特性,直接将合约名称转为对应整型值的哈希值;

获取到该合约的哈希值后,以该哈希值为缓存数组的索引,在缓存中查找是否存在对应的合约处理类;

如果不存在对应的合约处理类,则新建合约处理类并将该新建的合约处理类的指针返回;

如果存在对应的合约处理类,则继续判断该合约处理类中的处理对象的合约名称是否与该合约名称相同,若相同则直接返回该合约处理类,若不相同则遍历相同哈希值的哈希结果集链表,依次判断是否存在该合约的处理对象,如存在则返回该处理对象,若不存在则新建该合约的处理对象,并把该新建的处理对象添加在哈希结果集链表的尾端。

在重定位缓存数组的索引值的过程中,先根据数据更新时间计算出对应的分钟值,再比较数据更新时间的毫秒值,根据毫秒值确定数据在缓存数组中存放的索引位置。

去重模块配置为执行以下的处理:

如果缓存数组索引的数据更新时间和接收到的行情数据的数据更新时间相同,则认为接收到的行情是重复行情,对接收到的行情数据做丢弃处理;

如果缓存数组索引的数据更新时间小于接收到的行情数据的数据更新时间,则认为是新周期的数据,更新缓存数组的索引值;

如果缓存数组索引的数据更新时间大于接收到的行情数据的数据更新时间,则再继续判断接收的行情数据是否满足日期切换的状态:若满足隔夜状态则更新缓存数组索引值,反之则对接收到的行情数据做丢弃处理。

尽管为使解释简单化将上述方法图示并描述为一系列动作,但是应理解并领会,这些方法不受动作的次序所限,因为根据一个或多个实施例,一些动作可按不同次序发生和/或与来自本文中图示和描述或本文中未图示和描述但本领域技术人员可以理解的其他动作并发地发生。

本领域技术人员将进一步领会,结合本文中所公开的实施例来描述的各种解说性逻辑板块、模块、电路、和算法步骤可实现为电子硬件、计算机软件、或这两者的组合。为清楚地解说硬件与软件的这一可互换性,各种解说性组件、框、模块、电路、和步骤在上面是以其功能性的形式作一般化描述的。此类功能性是被实现为硬件还是软件取决于具体应用和施加于整体系统的设计约束。技术人员对于每种特定应用可用不同的方式来实现所描述的功能性,但这样的实现决策不应被解读成导致脱离了本发明的范围。

结合本文所公开的实施例描述的各种解说性逻辑板块、模块、和电路可用通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑器件、分立的门或晶体管逻辑、分立的硬件组件、或其设计成执行本文所描述功能的任何组合来实现或执行。通用处理器可以是微处理器,但在替换方案中,该处理器可以是任何常规的处理器、控制器、微控制器、或状态机。处理器还可以被实现为计算设备的组合,例如dsp与微处理器的组合、多个微处理器、与dsp核心协作的一个或多个微处理器、或任何其他此类配置。

结合本文中公开的实施例描述的方法或算法的步骤可直接在硬件中、在由处理器执行的软件模块中、或在这两者的组合中体现。软件模块可驻留在ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动盘、cd-rom、或本领域中所知的任何其他形式的存储介质中。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读取和写入信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻留在asic中。asic可驻留在用户终端中。在替换方案中,处理器和存储介质可作为分立组件驻留在用户终端中。

在一个或多个示例性实施例中,所描述的功能可在硬件、软件、固件或其任何组合中实现。如果在软件中实现为计算机程序产品,则各功能可以作为一条或更多条指令或代码存储在计算机可读介质上或藉其进行传送。计算机可读介质包括计算机存储介质和通信介质两者,其包括促成计算机程序从一地向另一地转移的任何介质。存储介质可以是能被计算机访问的任何可用介质。作为示例而非限定,这样的计算机可读介质可包括ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁存储设备、或能被用来携带或存储指令或数据结构形式的合意程序代码且能被计算机访问的任何其它介质。任何连接也被正当地称为计算机可读介质。例如,如果软件是使用同轴电缆、光纤电缆、双绞线、数字订户线(dsl)、或诸如红外、无线电、以及微波之类的无线技术从web网站、服务器、或其它远程源传送而来,则该同轴电缆、光纤电缆、双绞线、dsl、或诸如红外、无线电、以及微波之类的无线技术就被包括在介质的定义之中。如本文中所使用的盘(disk)和碟(disc)包括压缩碟(cd)、激光碟、光碟、数字多用碟(dvd)、软盘和蓝光碟,其中盘(disk)往往以磁的方式再现数据,而碟(disc)用激光以光学方式再现数据。上述的组合也应被包括在计算机可读介质的范围内。

提供对本公开的先前描述是为使得本领域任何技术人员皆能够制作或使用本公开。对本公开的各种修改对本领域技术人员来说都将是显而易见的,且本文中所定义的普适原理可被应用到其他变体而不会脱离本公开的精神或范围。由此,本公开并非旨在被限定于本文中所描述的示例和设计,而是应被授予与本文中所公开的原理和新颖性特征相一致的最广范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1