本发明涉及一种行情数据的发送算法,属于证券技术领域。
背景技术:
证券市场中,行情数据需要正确高效地发送给各用户,并保证数据的优先级满足用户的需求并期望能够降低行情到用户接收的时延。目前,随着市场迅速发展,业务也在不断创新发展,行情数据量会出现高发的情况,此时在不增加外在带宽的情况下,将行情数据发送给用户,必然会造成带宽拥堵,行情数据时延加大、或造成某些需要优先发送给用户的数据被排在后面等问题。
特别是当前的行情系统中,是所有行情数据放在单一队列发送给用户,没有对数据做优先级判断,当行情数据量比较大时,diff(增量)很大概率被排在一轮行情的后面发送,无法将diff(增量)优先发送
为了解决上述技术问题,特提出一种新的技术方案。
技术实现要素:
本发明的目的在于提供一种行情数据的发送算法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种行情数据的发送算法,所述算法包含以下步骤:
步骤一,股转前置机发送行情数据至服务端;
步骤二,服务端根据系统设置的扫描时间间隔和现有带宽,计算出单次可放入的timeout记录数;
步骤三,服务端根据系统设置的时间间隔扫描行情数据,查看数据是否有更新;
步骤四,如果步骤三的数据有更新,将diff数据全部放入发送队列,再放数量n的timeout记录;
步骤五,如果步骤三的数据没有更新,则发送队列全部为timeout数据;
步骤六,服务端将队列中的行情数据发送给用户;
步骤七,用户接收行情信息。
优选地,如果步骤三的数据有更新,将有更新的行情数据数据全部放入发送队列,再放数量n的timeout记录。
优选地,所述如果步骤三的数据没有更新,则diff=0,即发送队列全部为timeout数据。
优选地,所述算出单次可放入的timeout记录数的方式为通过max函数等于宽带w乘以检测间隔t,或max函数等于记录大小s乘以压缩率y乘以8计算出单次可放入的timeout记录数。
优选地,所述检测间隔t是指系统设置的扫描时间间隔。
优选地,所述记录数为每条记录的字节数c,所述计算出每条记录的字节数c的方法为,每条记录的字节数c==记录大小s乘以压缩率y乘以8。
与现有技术相比,本发明的有益效果是:
(1)通过计算每类行情数据在当前带宽以及检测时间间隔中可放入的最大数,减少了带宽的浪费。
(2)通过数学计算公式max{max-diff,max*10%},根据当前diff的数据计算出最大的timeout记录,将diff数据能够优先发送。
(3)算法修改对整个系统架构影响不大,发送数据量大时可以有效减低数据从交易所前置机到用户之间传输的时延。
附图说明
图1为本发明的算法流程示意图。
图2为本发明的架构图。
图3为本发明的程序流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅说明书附图,本发明提供一种技术方案:一种行情数据的发送算法,所述算法包含以下步骤:
步骤一,股转前置机发送行情数据至服务端;
步骤二,服务端根据系统设置的扫描时间间隔和现有带宽,计算出单次可放入的timeout记录数max=(带宽w*检测间隔t)/(单条记录大小s*压缩率y*8)。
a、检测间隔t是指“系统设置的扫描时间间隔”
b、计算出间隔t内能够传输的字节数b=带宽w*检测间隔t
c、计算出记每条记录的字节数c=记录大小s*压缩率y*8
d、根据上述两个步骤计算出max=b除以c计算中单次可以放入timeout记录数
步骤三,服务端根据系统设置的时间间隔扫描行情数据,查看数据是否有更新;
步骤四,如果步骤三的数据有更新,将有更新的行情数据数据全部放入发送队列,再放数量n的timeout记录,定义公式:1:d=max-diff,公式2:e=max*10%,当d>e时,n=d;当d<e时,n=e;如果步骤三的数据没有更新,则diff=0,即发送队列全部为timeout数据,综上,可定义公式3:n=max{max-diff,max*10%},n的取值由公式3确定。
步骤五,服务端将队列中的行情数据发送给用户;
步骤六,用户接收行情信息。
本发明对于每一类行情数据,分为diff(增量)和timeout(超时)记录,对于用户来说,diff(增量)优先级要高于timeout(超时)记录。本技术需要实现一类算法,将diff(增量)记录全部放入发送队列,再放入一定数量范围的timeout(超时)记录。最大的难点在该算法一定数量范围的timeout(超时)记录不确定,本次实现了一种算法,先计算出单次可以放入的最大记录数、并通过系统合理设置一定比例timeout(超时)记录数,实现了增量行情数据和超时数据都发送且又进行了优先级排序问题,行情发送方式分为组播发送和tcp发送,两类发送方式的处理流程如下:
本发明组播发送证券信息的方式为:
1、根据各参数,计算出单次可放入的timeout最大记录数max=(带宽w*检测间隔t)/(记录大小s*压缩率y*8)。其中,压缩率y=20%,单条证券行情记录大小为s。
2、服务端检查证券信息是否更新。
服务端每12s检查一轮行情数据库是否有更新,将更新的行情数据记录取出放入发送队列,diff赋值为更新的记录数,再检查此时的timeout数据记录数,若timeout记录数少于n,则全部放入发送队列,若timeout记录数大于n,则放n条,n取值为max{max-diff,max*10%};如未更新则直接在发送队列里放timeout数据,发送队列最多可放n=max的timeout记录,(n仍然适用公式:max{max-diff,max*10%},此时diff=0)。
3、tcp发送证券信息
4、如是新连接,则将全部记录当成diff数据,推送一次全量证券信息;
否则按照1,2步骤处理。
本发明该算法和解决方案中,核心部件主要有三个:
1、计算各类行情最大记录数:
根据各参数,计算出单次可放入的timeout记录数max=(带宽w*检测间隔t)/(记录大小s*压缩率y*8)。其中,压缩率y=20%,行情信息记录大小s=188bytes。
2、扫描行情源,根据算法计算出timeout记录:
检查行情源,证券信息是否更新,并发送数量n的timeout记录;n取值为max{max-diff,max*10%}。未更新,则n=max的timeout记录
3、发送数据至用户
用户组播连接,按照上述算法接收行情,如果是tcp新连接,则第一轮发送全量行情数据,第二轮开始采用和组播一致的发送算法。
本发明整个流程如下:
1、股转前置机发送行情数据至服务端;
2、服务端根据系统设置的扫描时间间隔,现有带宽,计算出单次可放入的timeout记录数max=(带宽w*检测间隔t)/(记录大小s*压缩率y*8)。其中,压缩率y=20%,单条证券信息记录大小s=188bytes;
3、服务端根据系统设置的时间间隔扫描行情数据,查看数据是否有更新;
4、如果数据有更新,将diff数据全部放入发送队列,再放数量n的timeout记录;n取值为max{max-diff,max*10%};
5、如果没有更新,则diff=0,n=max即发送队列全部为timeout数据,n取值同样适用于上述公式n=max{max-diff,max*10%};
6、服务端将队列中的行情数据发送给用户;
7、用户接收行情信息。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。