在多进程之间共享股票数据的方法及装置的制作方法

文档序号:6438559阅读:360来源:国知局
专利名称:在多进程之间共享股票数据的方法及装置的制作方法
技术领域
本发明涉及数据处理,更具体地说,涉及一种在多进程之间共享股票数据的方法及装置。
背景技术
证券市场的股票数据是一种数据量庞大,且不断实时更新的数据。在股票操作电子化的今天,需要将庞大的股票数据近于实时地、不断地由证券公司的数据处理中心(通常是服务器)传输到各用户端。这些用户端可能在证券公司内部,也可能通过网络与证券公司的服务器连接。因此,其传输速度非常关键。随着服务器机器性能的不断增长,现在单台服务器的CPU内核都超过一个,4核,8核,16核等等。一台服务器势必支持多个服务进程(这些服务进程可能是用户端提出的数据请求),而如何在单台服务器中搬迁大量实时数据,提高单台服务器的容量,降低CPU负载,是目前股票服务器追求的目标。目前市面上的股票服务器普遍采用Window平台下开发的服务器,单台服务器的多个服务进程通过socket将数据打包传输达到数据共享目的。在上述现有技术中,增加一个服务进程时需要增加一个数据拷贝,占用大量CPU时间进行搬迁;原始数据的存储不能达到快速数据分发的目的;耗费的CPU资源和内存资源势必影响到单台服务器的负载量,增加企业的运营成本。

发明内容
本发明要解决的技术问题在于,针对现有技术的上述共享数据占用时间长、耗费大量的CPU资源的缺陷,提供一种占用时间较短,耗费CPU资源较小的在多进程之间共享股票数据的方法及装置。本发明解决其技术问题所采用的技术方案是构造一种在多进程之间共享股票数据的方法,包括如下步骤
A)在共享存储区域建立每个股票的检索列表,并分别将所述检索列表中每一项与所述共享存储区域中的一段存储区域对应;
B)将接收到的股票数据经过处理后分别存入其检索列表项对应的存储区域;
C)通过消息管道通知需要所述已更新数据的进程;
D)各进程在所述共享存储区域中取得股票数据。在本发明所述的在多进程之间共享股票数据的方法中,所述步骤B)中进一步包括如下步骤
Bi)取得一个股票数据;
B2)将当前取得的股票数据与同一数据的先前取得的值比较,得到其增量值;
B3)存储所述得到的增量值到所述共享存储区域中与该股票数据对应的指定存储区域中。在本发明所述的在多进程之间共享股票数据的方法中,所述步骤A)中进一步包括如下步骤Al)形成股票检索列表;
A2)对所述检索列表中的每一项设定一指向所述共享存储区域中不同存储段的地址指
针;
A3)将所述地址指针指向的存储段初始化。在本发明所述的在多进程之间共享股票数据的方法中,所述步骤Al)中进一步包括如下步骤
All)取得每个股票的名称代码;
A12)将所述取得的名称代码使用长度固定而内容不同的字符串替代,得到所述股票的检索代码;
A13)排列所述检索代码得到检索列表。在本发明所述的在多进程之间共享股票数据的方法中,所述步骤D)中进一步包括如下步骤各进程分别按照所述股票的检索代码和取得的地址指针在所述地址指针指向的区域取得其所需数据。本发明还涉及一种实现上述在多进程之间共享股票数据方法的装置,包括 共享存储区建立单元用于在共享存储区域建立每个股票的检索列表,并分别将所述
检索列表中每一项与所述共享存储区域中的一段存储区域对应;
股票数据存储单元用于将接收到的股票数据经过处理后分别存入其检索列表项对应的存储区域;
数据通知单元用于通过消息管道通知需要所述已更新数据的进程;
数据排列单元用于按照所述股票的检索代码和取得的增量值次序排列各进程需要数据。在本发明所述的装置中,所述股票数据存储单元进一步包括 股票数据取得模块用于取得一个股票数据;
增量值取得模块用于将当前取得的股票数据与同一数据的先前取得的值比较,得到其增量值;
增量值存储模块用于存储所述得到的增量值到所述共享存储区域中与该股票数据对应的指定存储区域中。在本发明所述的装置中,所述共享存储区取得单元进一步包括 检索列表形成模块用于形成股票检索列表;
地址指针设置模块用于对所述检索列表中的每一项设定一指向所述共享存储区域中不同存储段的地址指针;
存储单元初始化模块用于将所述地址指针指向的存储段初始化。在本发明所述的装置中,所述检索列表形成模块进一步包括 股票代码取得子模块用于取得每个股票的名称代码;
检索码形成子模块用于将所述取得的名称代码使用长度固定而内容不同的字符串替代,得到所述股票的检索代码;
在本发明所述的装置中,所述数据排列单元进一步包括用于在各进程取得数据时将所述股票的检索代码和取得的增量值排列的数据排列模块。实施本发明的在多进程之间共享股票数据的方法及装置,具有以下有益效果由于按照该股票的名称形成检索列表,且每个检索列表分别对应固定的存储位置,该位置中存储的是股票数据的增量值,传输的也是该增量值,所以其查找数据较方便、传输数据量较小;因此,在多进程共享数据时占用时间较短,耗费CPU资源较少。


图1是本发明在多进程之间共享股票数据的方法及装置实施例中共享股票数据的方法的流程图2是所述实施例中股票数据处理流程图3是所述实施例中检索码列表形成的流程图4是所述实施例中实现多进程之间共享股票数据的装置结构示意图。
具体实施例方式下面将结合附图对本发明实施例作进一步说明。如图1所示,在本发明在多进程之间共享股票数据的方法及装置实施例中,在多进程之间共享股票数据的方法流程包括如下步骤
步骤Sll建立检索列表,对应列表中的项和指定的存储区域在本步骤中,划分或指定一存储区域作为共享存储区域,并在在共享存储区域建立包括每个股票的检索列表,并分别将检索列表中每一项与所述共享存储区域中的一段存储区域对应;也就是说,将每个股票(通常是股票名称代码,在本实施例中是由股票名称代码转换而来的检索码)排列到检索列表中,并对每个股票数据存储在共享存储区内的位置做出规定。使得一个股票的数据只能存储在指定的位置。步骤S12将股票数据处理后存在其对应的存储区域在本步骤中,将接收到的股票数据经过处理后分别存入其检索列表项对应的存储区域;每个股票均有相应的数据,各个股票的数据并不相同;这些数据在取得后,并不是将取得的数据本身存入指定区域,而是将经过处理后的数据存入,至于在本实施例中如何处理取得的股票数据,稍后详述。步骤S13通知进程数据已更新在上述步骤中,完成了数据的存储。上述步骤中, 步骤S12可能会重复许多次,分别将不同股票的数据存入不同的存储地址。当然,不管重复多少次,其股票的处理方式是相同的,不同的只是由于股票不同而带来的不同数据内容和存储地址。在本步骤中,通过连接进程的消息管道通知进程数据已更新,这些进程均为需要股票数据的进程。此如果一个进程要求的是未变化的股票数据,则返回一个空的消息,进程收到该消息后就会知道数据未变化,直接使用之前的数据即可。在一些情况下,也可以返回变化增量0,这使得本实施例中的方法具有更广泛的使用范围。步骤S14各进程取得数据在本步骤中,各进程到上述共享存储区域中取得其需要的股票数据;具体来讲,需要将股票的检索代码和该股票数据值(更新值,在本实施例中是股票数据的增量值,稍后有较为详细的描述)排列后由各进程读取。即每个进程读取每个股票数据的先后是先读取该股票的检索代码,再读取该股票数据的增量值。其中,上述步骤S12是存储每一个股票数据所需的步骤,由于市场上具有许多个股票,所以,步骤S12需要重复许多次,每个股票数据值的取得都需要重复一次。如图2所示,步骤S12中进一步包括步骤S21取得一个股票数据在本步骤中,从外部或其他数据源装置取得一个股票数据,该股票数据是未经处理的、通常的股票数据,例如,股票的当前价格。步骤S22比较当前取得数据与较早取得的该数据的值,得到其增量值在本步骤中,将当前取得的股票数据值与同一数据的先前取得的值比较,得到其增量值。例如,某个股票之前的价格是7. 90元,当前的价格为8. 00元,则其增量值为0. 1元;如果一个股票数据没有变化,则其增量值为0。当上述增量值为0时,如果该数据被要求,则可以不传输,这样可以极大地减少数据的传输量;即使传输该数据,则对于0而言,需要的传输字节数较一个小数或整数的字节也会大大减少,还是可以减小数据传输量。因此,在上述增量值为0的情况下,不管如何,都能减少数据传输量。而对于股票数据而言,大多数时候,股票数据的增量值都是为0的。因此本实施例中数据传输量较现有技术而言,大大地减少了。其占用的时间和消耗的资源也大大减少了。步骤S23存储该增量值到该股票数据对应的存储区域在本步骤中,将每个得到的对应于一个股票的股票数据增量值存储到共享存储区域中与该股票数据对应的指定存储区域(即被检索列表中股票项的地址指针指向的存储区域)中。而在本实施例中,如图3所示,步骤Sll还进一步包括
步骤S31取得股票名称代码在本步骤中,取得每个股票的名称代码; 步骤S32以不同的字符串代替该股票名称代码,得到该股票的检索码在本步骤中, 将取得的股票名称代码使用长度固定而内容不同的字符串替代,得到所述股票的检索代码;在本实施例中,使用两个字节的字符串来表示股票名称。上述步骤S31和S32也是表示了一只股票的操作流程,由于市场上具有多只股票,所以,在本实施例,上述步骤S31和S32 会重复许多次,一只股票一次。步骤S33排列多个股票检索码,得到检索列表在本步骤中,将经过上述步骤的重复得到的多个股票的检索码排列,得到检索列表,每个股票检索码占用该检索列表的一项,从而形成股票检索列表。在本步骤中,检索列表所在的地址与股票的检索代码相同或呈某种对应关系(也就是通过对检索代码进行设定的变换得到的地址)。步骤S34为检索列表的每项赋予表示不同存储区域的地址指针在本步骤中,对所述检索列表中的每一项设定一指向所述共享存储区域中不同存储段的地址指针;也就是说,检索列表中的每一项都被赋予的、表示不同存储区域的地址指针所填充,即检索列表的内容包括一系列的地址指针。这些地址指针通过映射指出了其对应的存储段或存储区域的位置。步骤S35初始化被上述地址指针指向的存储区域在本步骤中,将所述地址指针指向的存储段初始化。也就是将所有地址指针指向的存储区域格式化,准备接收数据。在本实施例中,还涉及一种实现多进程之间共享股票数据的装置,其结构如图4 所示,该装置包括共享存储区建立单元41、股票数据存储单元42、数据通知单元43及数据排列单元44。其中,共享存储区建立单元41用于在共享存储区域建立每个股票的检索列表,并分别将所述检索列表中每一项与所述共享存储区域中的一段存储区域对应;股票数据存储单元42用于将接收到的股票数据经过处理后分别存入其检索列表项对应的存储区域;数据通知单元43用于通过消息管道通知需要所述已更新数据的进程;数据排列单元44 各进程在所述共享存储区域中取得股票数据。其中数据排列单元44进一步包括用于在各进程取得数据时将所述股票的检索代码和取得的增量值排列的数据排列模块441 (该模块使得各进程在读取股票数据时先读取股票的检索代码,再读取该检索代码表示股票的当前数据的增量值)。在本实施例中,股票数据存储单元42进一步包括用于取得一个股票数据的股票数据取得模块421 ;用于将当前取得的股票数据与同一数据的先前取得的值比较,得到其增量值的增量值取得模块422 ;用于存储所述得到的增量值到所述共享存储区域中与该股票数据对应的指定存储区域中的增量值存储模块423。而共享存储区取得单元41进一步包括用于形成股票检索列表的检索列表形成模块411 ;用于对所述检索列表中的每一项设定一指向所述共享存储区域中不同存储段的地址指针的地址指针设置模块412 ;用于将所述地址指针指向的存储段初始化的存储单元初始化模块413。其中,检索列表形成模块411 进一步包括用于取得每个股票的名称代码的股票代码取得子模块414以及用于将所述取得的名称代码使用长度固定而内容不同的字符串替代,得到所述股票的检索代码的检索码形成子模块415。总而言之,在本实施例中,基于数据存放于共享区的策略,服务进程(包括生产进程和消费进程)共用共享存储区域。首先启动的服务进程首先创建共享存储区域,后面启动的服务进程则映射共享区。共享存储区域创建后,服务进程的动态增删将不再影响共享存储区域,因此服务进程可以动态配置。共享存储区域创建后,对股票代码和市场类型进行预编码,由于证券市场有很多交易所,每只股票通过市场类型和股票代码唯一标识一只股票。 以现有市场的股票代码规则计算,至少要8个字节来标识(例如sz000001) —只股票,每次数据传输,对单只股票来说,都需要传输一次。每次行情包括指数等有4000多只,3 6秒一次的数据更新,冗余量非常大,为了减少传输的带宽和在服务器内数据的快速索引,在本实施例中,采取了对股票代码和市场类型进行预编码。采用2个字节作为唯一的股票检索码,当行情更新时,传输的是股票索引,同时,通过索引可以快速查找到在存储块中的数据, 提高效率。股票检索码跟股票代码和市场类型的对应关系在行情初始化时就会在各服务器和客户端之间进行同步。通过对股票代码和市场类型进行编码后,就产生2字节大小的股票检索码。在共享存储区中建立一个检索码表跟数据块(存储区域)指针对应关系的编码表 (即检索列表)。通过股票检索码作为索引编码表数组的下标,(即股票检索码作为检索列表数组的直接或间接地址,由于股票检索码是通过两个字节构成的,所以直接设置其数量是 65536的数组,这个数组中每项填入地址指针,就是检索列表,其中,65536是2的16次方) 可以快速定位出数据块的存储地址。这种方式可以以恒定时间级别定位到数据,以空间换时间,而整个检索码列表仅一份,为生产进程和多消费服务共享。从4个小时的交易市场来看,对同一只股票来说股票数据前后2个数据相差不多, 通过对股票数据采用增量压缩技术,可以极大的减少内部的存储空间和网络的传输带宽。 普通股价传输到客户端通常需要4个字节,而采用增量压缩的方式,跟前一个股价相同时, 可以不进行传输,这种情况在个股数据传输中会大量存在。同时,即使传输也不需要4个字节。同时,在本实施例中,还采取预存储的方式,就是生产进程根据增量压缩策略一次压缩相应股票数据,多个消费进程不需要再进行一次压缩编码,直接根据索引快速寻找内存块中的数据,采用FAST的编码,通过帧间差值编码的压缩技术,多个消费进程来取就直接来取,不用多次压缩,节约内存和CPU时间。
在本实施例中,一份数据多进程共享,进程可动态增加,进程可动态减少,提高扩展性强。通过股票索引以衡定时间快速索引数据。一台机器同时有多个服务进程运行,不同服务进程之间使用共享内存进行数据的共享,多进程可同类服务进程,也可不同类。如果一个进程用多线,那么进程提供服务就单一。如果按普通多进程的方式,一个程序是一种服务,有多种服务就不能共享,要另外开传输数据共享。减少数据的多方拷贝也节省内存空间,加快数据的迁移速度。进程之间的通过消息管道同步消息。多个进程可减少数据搬迁的速度,CPU效率提高。多个进程共享流程如上所述,包括了生产进程接收到数据,经过生产进程进行解码和规范化;将数据存储在共享内存区;发送数据送达通知消息到消息管道; 服务器内多个消费进程监听管道,并捕获到数据送达通知消息;消费进程到数据共享区中获取到所要的数据;消费进程经过业务处理,将数据传递到下一级的生产进程。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
权利要求
1.一种在多进程之间共享股票数据的方法,其特征在于,包括如下步骤A)在共享存储区域建立每个股票的检索列表,并分别将所述检索列表中每一项与所述共享存储区域中的一段存储区域对应;B)将接收到的股票数据经过处理后分别存入其检索列表项对应的存储区域;C)通过消息管道通知需要所述已更新数据的进程;D)各进程在所述共享存储区域中取得股票数据。
2.根据权利要求1所述的在多进程之间共享股票数据的方法,其特征在于,所述步骤 B)中进一步包括如下步骤Bi)取得一个股票数据;B2)将当前取得的股票数据与同一数据的先前取得的值比较,得到其增量值;B3)存储所述得到的增量值到所述共享存储区域中与该股票数据对应的指定存储区域中。
3.根据权利要求2所述的在多进程之间共享股票数据的方法,其特征在于,所述步骤 A)中进一步包括如下步骤Al)形成股票检索列表;A2)对所述检索列表中的每一项设定一指向所述共享存储区域中不同存储段的地址指针;A3)将所述地址指针指向的存储段初始化。
4.根据权利要求3所述的在多进程之间共享股票数据的方法,其特征在于,所述步骤 Al)中进一步包括如下步骤All)取得每个股票的名称代码;A12)将所述取得的名称代码使用长度固定而内容不同的字符串替代,得到所述股票的检索代码;A13)排列所述检索代码得到检索列表。
5.根据权利要求1-4中任意一项所述的在多进程之间共享股票数据的方法,其特征在于,所述步骤D)中进一步包括如下步骤各进程分别按照所述股票的检索代码和取得的地址指针在所述地址指针指向的区域取得其所需数据。
6.一种在多进程之间共享股票数据的装置,其特征在于,包括共享存储区建立单元用于在共享存储区域建立每个股票的检索列表,并分别将所述检索列表中每一项与所述共享存储区域中的一段存储区域对应;股票数据存储单元用于将接收到的股票数据经过处理后分别存入其检索列表项对应的存储区域;数据通知单元用于通过消息管道通知需要所述已更新数据的进程;数据排列单元用于按照所述股票的检索代码和取得的增量值次序排列各进程需要数据。
7.根据权利要求6所述的在多进程之间共享股票数据的装置,其特征在于,所述股票数据存储单元进一步包括股票数据取得模块用于取得一个股票数据;增量值取得模块用于将当前取得的股票数据与同一数据的先前取得的值比较,得到其增量值;增量值存储模块用于存储所述得到的增量值到所述共享存储区域中与该股票数据对应的指定存储区域中。
8.根据权利要求7所述的在多进程之间共享股票数据的装置,其特征在于,所述共享存储区取得单元进一步包括检索列表形成模块用于形成股票检索列表;地址指针设置模块用于对所述检索列表中的每一项设定一指向所述共享存储区域中不同存储段的地址指针;存储单元初始化模块用于将所述地址指针指向的存储段初始化。
9.根据权利要求8所述的在多进程之间共享股票数据的装置,其特征在于,所述检索列表形成模块进一步包括股票代码取得子模块用于取得每个股票的名称代码;检索码形成子模块用于将所述取得的名称代码使用长度固定而内容不同的字符串替代,得到所述股票的检索代码;检索码排列子模块用于排列所述检索代码得到检索列表。
10.根据权利要求9所述的在多进程之间共享股票数据的装置,其特征在于,所述数据排列单元进一步包括用于在各进程取得数据时将所述股票的检索代码和取得的增量值排列的数据排列模块。
全文摘要
本发明涉及一种在多进程之间共享股票数据的方法,包括如下步骤在共享存储区域建立每个股票的检索列表,并分别将所述检索列表中每一项与所述共享存储区域中的一段存储区域对应;将接收到的股票数据经过处理后分别存入其检索列表项对应的存储区域;通过消息管道通知需要所述已更新数据的进程;各进程在所述共享存储区域中取得股票数据。本发明还涉及一种在多进程之间共享股票数据的装置。实施本发明的在多进程之间共享股票数据的方法及装置,具有以下有益效果占用时间较短,耗费CPU资源较少。
文档编号G06Q40/04GK102385526SQ20111036340
公开日2012年3月21日 申请日期2011年11月16日 优先权日2011年11月16日
发明者周垂富, 王钦才 申请人:深圳市大赢家网络有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1