提高归属位置寄存器接口系统处理速度的方法

文档序号:7613070阅读:93来源:国知局
专利名称:提高归属位置寄存器接口系统处理速度的方法
技术领域
本发明涉及一种提高接口系统处理速度的方法,尤其涉及一种提高归属位置寄存器(HLR)接口系统处理速度的方法。
背景技术
随着电信市场的快速发展和对通信质量要求的不断提高,电信运营商对设备供应商和服务供应商提出了更高的要求。归属位置寄存器(HLR)开放新的接口来支持新的通信协议,用以提升其他业务系统和归属位置寄存器的通信速度。从最早提供的RS-232(美国电子工业联合会(EIA)与贝尔(BELL)等公司一起开发的1969年公布的通信协议)接口,到后来的X.25(国际电信联盟于1992年制定的通信协议)接口,到现在的TCP/IP(TCP/IP是一个分层的协议簇,包含着上千个协议。现在的协议的标准化由互联网协会协调维护,其中最主要的是网际协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP))接口。
限制归属位置寄存器处理速度的第一因素是归属位置寄存器指令的获取速度,并最终受制于归属位置寄存器(HLR)指令执行的速度;若归属位置寄存器获取不到需要其执行的指令,则不管归属位置寄存器指令执行的速度有多快,都无法发挥归属位置寄存器的处理能力。而归属位置寄存器指令获取速度的提高有两个途径,一是归属位置寄存器提供新的通信接口,让业务系统和归属位置寄存器的通信能应用较快的通信协议;二是尽可能提高业务系统向归属位置寄存器提交指令的速度。
由于需要与归属位置寄存器进行通信的业务系统一般以数据库表的方式提供需归属位置寄存器完成的业务需求,而非是归属位置寄存器所能直接执行的指令形式。因此需要有这样一套系统,其能够将业务系统的业务需求转换成归属位置寄存器能执行的指令并将指令提交给归属位置寄存器执行,使归属位置寄存器能够完成业务需求。另一方面,此系统也能将归属位置寄存器的指令执行结果返回给业务系统,使业务系统中保留归属位置寄存器的执行结果,以供用户查询和统计。此系统即为归属位置寄存器的接口系统,其主要功能是在业务系统和归属位置寄存器之间起指令转换作用和通信作用。
归属位置寄存器指令执行的速度取决于归属位置寄存器的型号、版本等。而与归属位置寄存器进行通信所选择的通信协议和接口同样受限于归属位置寄存器的型号、版本等。因此,在和归属位置寄存器的通信协议和接口已被确定并且归属位置寄存器的指令执行能力未被充分利用的情况下可以通过提高归属位置寄存器接口系统的处理速度来达到提高归属位置寄存器处理速度的目的。换言之,优化归属位置寄存器接口系统功能,加快业务系统数据转换成归属位置寄存器指令的速度,即可以提高归属位置寄存器的处理速度。
对于在业务系统和归属位置寄存器之间起指令转换作用和通信作用的归属位置寄存器的接口系统是建立在服务器(电脑)内,一般而言完成三个功能读表数据、通信、回写执行结果。其中,读表数据主要的功能是将业务系统提供的数据从数据库表中读取出来;通信功能是指将接收到的表数据转换成归属位置寄存器能执行的指令,并将转换后的指令提交给归属位置寄存器;并接收归属位置寄存器的指令执行结果;回写执行结果的功能是指将接收到的归属位置寄存器执行指令的结果回写到数据库表中。
可见,在先技术中的接口系统只是简单的从数据库表中读取数据,转换成归属位置寄存器指令,将指令提交给归属位置寄存器执行,再接收归属位置寄存器的执行结果,回写到数据库表中。在这种方式中,由于后一步骤的执行依赖于前一步骤的执行结果。因此其局限性显而易见。在读表程序未读取到数据库表中的记录时,通信程序、归属位置寄存器、回写表程序都必须等待;当通信程序未完成指令转换时,归属位置寄存器、回写表程序都必须等待。读表程序此时若空闲,则可以读取数据库表中的另一条记录,若已读取完另一条记录,则也必须等待,等待通信程序接收下一条记录;在归属位置寄存器指令执行时,回写表程序、读表程序和通信程序都必须等待,等待此条记录被归属位置寄存器执行完毕。
鉴于上述接口系统的处理效率太低下,有些改良的接口系统采取多进程的方式,即对于一张数据库表和一个归属位置寄存器,一套接口系统中包含多个读表程序、回写表程序和通信程序;由于同时运行多个相同功能的程序,接口系统的效率能明显提高。但此种方式需要增加和数据库表的连接数。而当连接数上升到较高的数目时,数据库管理开销增大,并且占用大量系统内存和资源,给操作系统带来极大的压力。

发明内容
本发明的主要目的在于提供一种提高归属位置寄存器接口系统处理速度的方法,其可充分发挥归属位置寄存器接口系统的处理速度,加快向归属位置寄存器提交指令的速度,减少归属位置寄存器的空闲等待时间,从而提高归属位置寄存器执行指令的效率,从整体上提高业务系统和归属位置寄存器的通信速度。
本发明的技术方案是对于建立在服务器(电脑)内的连接于数据库表与归属位置寄存器之间的接口系统执行读表程序、通信程序和回写表程序中,本发明在接口系统执行的读表程序与通信程序之间加入在服务器的内存中建立内存队列,并将读取数据库表数据写入内存队列中,再将内存队列中的表数据转换成归属位置寄存器所能执行的指令提交给归属位置寄存器的程序;在接口系统执行的通信程序与回写表程序之间加入将接收归属位置寄存器执行指令的结果写入建立在服务器的内存中的内存队列中,并将内存队列中的归属位置寄存器执行指令的结果回写到数据库表中的程序。
本发明接口系统的处理方法包括的步骤是(1)进行读表进程首先根据与接口系统相连的归属位置寄存器的逻辑连接数目,在服务器的内存中建立相同数目的以数组形式存在的内存队列,同时定义包括内存队列对应的归属位置寄存器的序号,内存队列内的数组数量等的相关属性;然后进行第一程序按照归属位置寄存器序号的从小到大的顺序读取数据库表数据;再进行第二程序根据记录中的归属位置寄存器的序号将读取到的记录写入此序号归属位置寄存器所对应的内存队列中,若此序号归属位置寄存器所对应的内存队列数目大于1个,则按照内存队列的序号的从小到大的顺序存放对应此归属位置寄存器序号的表数据;(2)进行通信进程首先读取上述存入内存队列中的表数据,将其转换成归属位置寄存器所能接受的指令,并将转换后的归属位置寄存器的指令提交给归属位置寄存器;同时接收归属位置寄存器执行指令的结果,并将接收到的归属位置寄存器执行指令的结果写入到内存队列中;(3)进行回写表进程读取上述存入内存队列中的归属位置寄存器执行指令的结果,并将其回写到数据库表中。
所述的归属位置寄存器的逻辑连接是指归属位置寄存器的接口系统与归属位置寄存器建立的逻辑上的″虚连接″,又称″虚电路”。是在归属位置寄存器的接口系统与归属位置寄存器之间建立的一条临时性或永久性的“逻辑”通信信道。每台归属位置寄存器可以有多个逻辑连接,一套归属位置寄存器的接口系统也可以和多台归属位置寄存器物理连接。因此,一套接口系统可以和多台归属位置寄存器建立多个逻辑连接。本发明的接口系统是根据与归属位置寄存器的逻辑连接数目在服务器(电脑)的内存中建立相等数目的内存队列。
所述的内存队列是以数组形式存在。每个内存队列可以创建N个数组。N的值综合读表程序的速度、回写表程序的速度、通信程序的速度和归属位置寄存器执行指令的速度而定的。若所定N的值太大,即内存队列的长度过长,则内存队列的利用率不高,导致了内存资源的浪费;另一方面若一个内存队列中的记录太多,有些记录可能需要等待较长时间才能被处理到,而同时别的内存队列有可能是空着的;若所定N的值太小,即内存队列的长度过短,则读表程序和回写表程序需要等待的时间过多,无法充分利用内存队列的优势。
内存队列的数组中存放的内容包括数组标志,操作时间,数据库表中各字段内容合并成的字符串等。本发明的接口系统利用数组中存放的数组标志的值来判断数组的状态。数组标志的不同值分别代表了内存队列数组的空闲状态、待处理状态、处理中状态、处理完状态。内存队列的相关属性包括内存队列对应的归属位置寄存器序号,内存队列的数组数量等。
所述的进程是一种活动,它是由一个动作系列组成,每个动作是在某个数据集上执行一段程序,整个活动的结果是提供一种系统或用户功能。进程能用来描述程序的执行过程,且可以作为共享资源的基本单位。一个程序从外存调入内存开始执行,操作系统就要为其创建进程。读表进程即是指读表程序的执行过程,回写表进程即是指回写表程序的执行过程,通信进程即是指通信程序的执行过程。读表程序将读取到的数据库表数据按所属的归属位置寄存器序号写入属同一归属位置寄存器的内存队列中。读表进程的数目根据读表程序、回写表程序的速度和内存队列长度而定。以内存队列中数据存放和数据读取速度大致相等,使内存队列中基本没有空闲数组。同时通信程序和归属位置寄存器都没有空闲等待时间。若一个读表进程无法很好的提供读取数据库表数据和将数据库表数据放入内存队列的合适速度的话,也可以创建多个读表进程。回写表进程也一样,若一个回写表进程无法提供读取内存队列数据和将内存队列数据写入数据库表的合适速度的话,也可以创建多个回写表进程。因此,一个读表进程可以只针对一个内存队列,也可以针对多个内存队列;一个回写表进程可以只针对一个内存队列,也可以针对多个内存队列;读表进程和回写表进程可以针对同一个内存队列,也可以针对不同的内存队列。
所述的通信进程既担当着将内存队列中需要归属位置寄存器处理的数据转换成相关指令并提交给归属位置寄存器执行的功能,同时也需要接收归属位置寄存器执行指令的结果并写入内存队列中。由于同一个归属位置寄存器不能同时接收和发送数据,因此接收和发送归属位置寄存器数据的功能集中在一个通信程序中。所述的多个通信进程是指对同一内存队列可以对应多个通信进程,若通信进程速度允许,一个内存队列可只使用一个通信进程,甚至多个内存队列可以只使用一个通信进程,通信进程运行的数目由归属位置寄存器执行指令的速度确定。
所述的转换成归属位置寄存器指令是指将业务系统的业务需求转换成归属位置寄存器所能识别的命令格式。例如若业务系统的表数据表示的业务需求为“设置来电显示”,则转换后的阿尔卡特归属位置寄存器指令形式为字符串“ENTGCSMSIN=XXXXXXXXXX,GCS=CLIP”其中“ENTGCS”字符串表示设置一常规电话服务(ENTER A GENERAL CALL SERVICE),“MSIN=XXXXXXXXXX”中“MSIN”字符串表示移动用户识别码(MOBILE SUBSCRIBERIDENTIFICATION NUMBER),“XXXXXXXXXX”表示国际移动用户识别码(IMSI,最大长度为15位十进制数字)去掉前5位字符后(前2位字符表示国家,中国对应的字符串为“46”,前第3至第5位表示电信运营商,其中中国移动对应的字符串是“000”或“002”,中国联通对应的字符串为“001”或“003”)剩下的10个字符,“GCS”字符串表示普通电话服务(GENERAL CALL SERVICE),“CLIP”字符串表示来电显示(CALLING LINE IDENTIFICATIONPRESENTATION)。
由上述可以看出本发明的接口系统的处理速度有显著地提高。因为,本发明的主要技术方案就是以内存队列作为归属位置寄存器指令转换的数据源和归属位置寄存器指令执行结果回写入数据库表的中转站。细分了接口系统的处理步骤,将读表进程、回写表进程和通信进程分归于不同的多个执行进程,充分发挥各程序的协同速度,通过提高各个操作环节的执行速度,来达到提高归属寄存器接口系统的处理速度的目的,并最终减少了归属位置寄存器的空闲等待时间,从而提高了业务系统和归属位置寄存器的通信速度。


图1是在先技术的归属位置寄存器接口系统处理过程的示意图。
图2是本发明的归属位置寄存器接口系统处理过程的示意图。
图3是本发明的归属位置寄存器接口系统处理进程的示意图。
图4是本发明的一个较佳实施例中接口系统和数据库表和归属位置寄存器的通信示意图。
图5是图4实施例的通信流程图。
图6是图4实施例的内存队列创建流程图。
图7是图4实施例的读表进程的读表数据流程图。
图8是图4实施例的读表进程的表数据放入内存队列的流程图。
具体实施例方式
下面结合附图,进一步介绍本发明的方法。
图1所示是在先技术的接口系统处理过程的示意图。从图中可以看出接于数据库表100与归属位置寄存器300之间的建立在服务器(电脑)内的接口系统200内的读表程序210、通信程序220和回写表程序230三者为串行执行处理过程的关系。前一步骤的执行结果为后一步骤的数据来源。因此整个通信过程中归属位置寄存器的空闲等待时间较长,未能充分发挥归属位置寄存器的执行指令能力。
图2是本发明的归属位置寄存器接口系统处理过程的示意图。从图2中可以看出,接口系统200在利用了内存队列的同时,本发明的接口系统将读表程序210、通信程序220和回写表程序230各自独立为进程,在一套接口系统中,应用了多个(至少一个)内存队列201和多个通信程序220。
图3为本发明接口系统200处理方法的示意图。从图3中可以看出,归属位置寄存器接口系统的处理方法包括三个步骤,读表进程2001、通信进程2002和回写表进程2003。其中,读表进程2001包括两个程序第一程序20011,从数据库表100中读取表数据;第二程序20012将表数据写入内存队列中。通信进程2002也包括两个程序第一程序20021读取内存队列表数据,并将其转换为归属位置寄存器的指令提交给归属位置寄存器300;第二程序接收归属位置寄存器300的执行指令的结果并写入内存队列。回写表进程2003包括将内存队列中的归属位置寄存器300执行指令的结果回写入数据库表100中的程序。
图4是本发明的一个较佳实施例中接口系统和数据库表及归属位置寄存器的通信示意图。
首先,建立在服务器内的接口系统根据连接的s台归属位置寄存器的M个逻辑连接数在服务器的内存中创建M个内存队列。每个内存队列包含的数组数量为N。为了最高效率地利用内存资源并适合各程序的运行速度,将N定为10-30为宜,在以下实施例中将N定为20。
其次,接口系统创建一个读表进程,一个回写表进程和s个通信进程。
再次,读表进程2001从数据库表100中读取需要归属位置寄存器执行的记录放入内存队列2011、内存队列2012或内存队列2013中。
然后,2002通信进程1从内存队列2011中读取未处理过的数据库表数据转换成归属位置寄存器300能执行的指令,将指令提交给归属位置寄存器300;归属位置寄存器300执行接收到的指令,将执行结果返回给通信进程1,通信进程1将接收到的归属位置寄存器的指令执行结果写入内存队列2011的数组中。
接着,回写表进程2003将内存队列中存放的归属位置寄存器执行指令的结果回写到数据库表100中。
图5为本发明的接口系统进行处理的流程图。可进一步说明图3、图4所示的接口系统与数据库表及归属位置寄存器的具体通信过程。
(1)首先,进行读表进程2001开始,第一步一执行第一程序20011读取数据库表数据;第二步2120判断内存队列中数组的数组标志变量F是否为0,若数组标志变量F为0,则进行第三步;第三步-执行第二程序20012将表数据写入此内存队列的数组中,并执行第四步骤;
第四步骤2122将写入表数据的对应内存队列数组的数组标志变量赋值为1。上述的第一步20011、第二步2120、第三步20012和第四步2122为读表进程所做的操作;其中,数组标志变量F=0表示为空闲数组,可存放数据库表数据,数组标志变量F=1表示为待处理数组,其存放的数据可供通信进程读取,并等待通信进程对其进行指令转换及等待归属位置寄存器执行。
进行通信进程2002开始第五步-执行第一程序20021读取内存队列中的表数据,并执行第六步;第六步2211将数组标志变量赋值为2,接着执行第七步;第七步2212将内存队列中的表数据转换为归属位置寄存器所能执行的指令后,执行第八步;第八步2213将转换后的指令提交给归属位置寄存器;第九步301归属位置寄存器执行收到的指令;第十步-进行通信进程2002执行第二程序20022接收归属位置寄存器的指令执行结果后,执行第十一步;第十一步2221判断内存队列的数组标志变量是否为2,若数组标志变量F值为2,执行第十二步;第十二步2222将接收到的归属位置寄存器执行指令的结果写入此内存数组中,并执行第十三步;第十三步2223将此内存数组对应的数组标志变量赋值为3后,结束。
上述第五步-第一程序20021、第六步骤2211、第七步骤2212、第八步骤2213、第九步-第二程序20022、第十一步骤2221、第十二步骤2222、第十三步骤2223为通信进程所做的操作。当数组标志变量F=2,表示为处理中数组,表示此数组内的表数据已经提交给归属位置寄存器并且归属位置寄存器还未返回执行结果;当数组标志变量F=3,表示为处理完数组,此数组内保存的数据为归属位置寄存器返回的执行结果。
进行回写表进程第十四步2003读取上述数组标志变量F=3的数组中所保存的归属位置寄存器返回的执行结果的数据并写回到数据库表中。并执行第十五步骤;第十五步骤2301将被回写入数据库表的对应的内存队列数组的数组标志变量F重新赋值为0,从而使此内存数组可供读表进程再次存放读取到的数据库表数据。上述第十四步2003和第十五步骤2301为回写表进程所做的操作。
上述第十一步骤2221,当数组标志变量F不等于2时,执行第二十步2224将数组序号加1后,执行第二十一步2225判断数组序号是否大于或等于数组的数量N,若数组序号是大于或等于N,执行第二十二步2226查找下一个内存队列,并执行第二十三步2227判断队列序号是否大于或等于内存队列的数目M,若是大于或等于M(本实施例中M=2),则结束。若第二十一步2225判断数组序号不大于或等于N,则执行第十步-进行回写表进程20022。当第二十三步2227判断内存队列序号不大于或等于M时,则也执行第十步-进行回写表进程20022。上述第二十步骤2224,第二十一步骤2225、第二十二步骤2226、第二十三步骤2227即是按同一内存队列的数组序号和属同一归属位置寄存器的内存队列的序号依次查找可存放归属位置寄存器执行结果的内存队列数组。
上述第二步2120判断内存队列中数组标志F不等于0时,执行第十六步2123将数组序号加1后;执行第十七步2124判断数组序号是否大于或等于数组的数量N,若是大于或等于,执行第十八步2125将内存队列序号加1后;执行第十九步判断队列序号是否大于或等于内存队列的数目M(本实施例中M=2),若是大于或等于M,则执行第十五步2301将F重新赋值为0,结束。当第十七步2124判断数组序号不是大于或等于N,则执行第二步2120重新将数组标志F赋值为0。上述第十六步骤2123、第十七步骤2124、第十八步骤2125、第十九步骤2126即是按同一内存队列中的数组序号、同一归属位置寄存器所属的内存队列的序号依次查找内存队列的数组空闲与否,其中N为内存队列的数组数量,在本实施例中其值为20,M为每一归属位置寄存器对应的内存队列数量,在本实施例中对应归属位置寄存器1的M值为2。
图6为本接口系统中的使用的内存队列的创建过程的详细描述。本接口系统中各进程之间数据的共用共享内存队列实现,在win32(微软的32位视窗)操作系统中,各进程之间共享内存使用的是映射文件(是指一个文件映射到一块内存中,对此文件的访问可转变成对内存的访问,其中的映射是指文件与实际内存的对应关系)。用户可以把内存映射到任何的映射文件中,包括系统内存页(内存页是指一种固定大小的内存快,例在应用英特尔生产的x86系列中央处理器的平台中内存页的大小为4K字节)。利用共有内存实现各进程之间的数据共享。内存队列(共享内存队列)创建的具体步骤是第一步20041建立内存队列的记录结构,即定义内存队列的记录属性,明确相应记录属性的类型和大小。记录属性包括记录的处理标志、操作时间,数据库表中各字段内容合并成的字符串等。
第二步20042建立内存队列结构,即定义内存队列属性,明确相应内存队列属性的类型和大小。内存队列属性包括内存队列对应的归属位置寄存器序号、内存队列的数组数量等。
第三步20043将内存队列的序号赋值为1。
第四步20044计算对应序号的内存队列的大小。根据内存队列结构、记录结构得出内存队列所需大小为内存队列结构所占字节数+内存队列中的数组数×记录结构所占字节数。例如内存队列结构所占字节数为20,内存队列中的数组数为5,记录结构所占字节数为10,则此内存队列所需的大小=20+5×10=70字节。
第五步20045用WIN32操作系统提供的创建文件(CreateFile)函数创建可共享读写的映射文件。映射文件的属性包括文件名、读写权限、文件状态(打开、关闭)等,映射文件创建成功后返回文件句柄(通常的句柄是指一个唯一的数,用以标识许多不同的对象类型,入窗口、菜单、内存、画笔、话刷、电话线路等;在Win32操作系统中,句柄是指一个“无类型对象”的指针,也就是一个4字节长的数据)。
第六步20046用WIN32操作系统提供的创建文件映射对象(CreateFileMapping)函数并调用已创建文件的文件句柄创建文件映射对象。创建文件映射包括的参数有可共享读写文件的文件句柄、文件映射的保护选项、内存队列的大小、共享内存队列名等。
第七步20047当文件映射对象创建成功后,以文件映射返回的句柄作为参数,调用WIN32操作系统提供的映射文件视图(MapViewOfFile)函数为文件映射对象创建视图,映射文件视图(MapViewOfFile)函数将返回指向映射文件的视图指针。
第八步20048将内存队列的序号加1。
第九步20049判断内存队列的序号是否大于需要建立的内存队列数量。若还未大于,则系统返回到第四步20044,继续下一内存队列的创建;否则内存队列创建结束。
利用内存队列创建后返回的视图指针对映射文件进行操作,内存的读写简化到了就像普通变量的操作。
图7是对图3中读表进程2001中第一程序20011从数据库表中读取数据的具体程序加以详细描述。
第一步2110,当读表程序开始运行时,先将待读取的归属位置寄存器(HLR)的序号赋值为1;第二步2111,判断数据库表100中对应该归属位置寄存器1的是否有需要读取的数据,若没有,说明数据库表中需要归属位置寄存器1处理的记录已经被处理完成或正在处理中,不需再读取,执行第十步2118,判断归属位置寄存器(HLR)的序号是否等于本接口系统与物理连接的归属位置寄存器的数目S,若相等,则说明已没有需要读取的数据库表数据,停止读表数据,否则,执行第六步2114,只停止运行对该归属位置寄存器序号所对应的表数据读取;若有需要读取的数据,进行第三步2112;第三步2112,读取对应该归属位置寄存器序号1所对应的数据库表中的记录,若是第一次读取,则应该是归属位置寄存器1所对应的记录;第四步2331,判断第三步读取记录是否成功,若不成功,说明已不存在对应该归属位置寄存器1的记录,执行第六步2114,停止读取对应该归属位置寄存器序号的记录,若读取成功,执行第五步;第五步20012,将读取到的数据库表中的记录写入对应该归属位置寄存器1的内存队列中,并判断写入是否成功,若写入成功,接口系统执行第二步骤2111,若写入失败,说明对应该归属位置寄存器序号的内存队列中待处理的记录是满的或已经达到规定的最大待处理数组记录数,内存队列中无空闲位置或不允许写入更多的待处理记录,接口系统执行第六步2114;第六步2114,停止读取该归属位置寄存器1的数据库表数据;第七步2115,将需要读取的归属位置寄存器序号加1;第八步2116,判断归属位置寄存器序号是否大于和接口系统物理连接的归属位置寄存器的数目S,若已经大于S,说明接口系统已按连接的归属位置寄存器的序号大小依次执行完一遍,接口系统需从归属位置寄存器1重新开始,因此,执行第九步骤2117;若未大于S,说明可读取下一序号的归属位置寄存器的数据,因此,执行第二步骤2111;第九步2117,将归属位置寄存器序号重新赋值为1,按归属位置寄存器序号重新开始数据库表数据的读取,再开始进行第二步;第十步2118,判断归属位置寄存器(HLR)序号是否等于本接口系统与物理连接的归属位置寄存器的数目S,如果是等于(相等),则停止读表进程;否则执行第六步2114。
从上述读取数据库表记录的步骤和过程(图7所示)看,读表程序是按归属位置寄存器的序号从小到大的顺序读入数据。由于当每一归属位置寄存器的数据写入内存队列失败时都立刻读入下一序号的归属位置寄存器的数据,保证数据库表中的每一序号归属位置寄存器的数据在短时间内都能较平等的被读取到内存队列中。
由于内存队列中的表数据的分布将决定表数据被转换成归属位置寄存器指令和指令提交给归属位置寄存器执行的顺序。因此,对应各个序号归属位置寄存器的表数据在内存队列中应均衡分布,保证任一序号归属位置寄存器的表数据都能在较短的时间内得到处理。下面将详细介绍读表进程将读取到的数据库表数据放入内存队列的程序。
图8为读表进程2001中第二程序220012将读取到的数据库表数据写入内存队列的流程图。由于一个归属位置寄存器可提供多个逻辑连接,因此针对一个归属位置寄存器创建有多个内存队列,如图4所示,归属位置寄存器1(HLR1)对应的为内存队列2011、内存队列2012,从数据库表中读取需要归属位置寄存器1(HLR1)处理的表数据(也叫记录)可放入内存队列1(2011)或内存队列2(2012)中。为平衡的利用内存资源,使放入内存队列中的记录都能在较平均较短的时间内得到处理,本发明定义了每个内存队列的两个门限值最小未处理数组记录数Vmin,最大未处理数组记录数Vmax。在本实施例中Vmin=10,Vmax=20。读表进程在读取数据库表数据后,需先确定写入的内存队列和数组。其写入程序的步骤是第一步2120,统计归属位置寄存器(HLR)序号N(图8中N=1)的第1内存队列(图8中内存队列1)中的未处理数组记录数Vu;第二步2121,判断是否是第一次轮询该第1内存队列,这里的第一次轮询是指在遍历一次所有序号归属位置寄存器(归属位置寄存器1~归属位置寄存器s)的内存队列的过程中的第一次轮询该第1内存队列,若是第一次,则执行第三步2122,若非第一次,则执行第四步骤2123;第三步2122,判断该第1内存队列的未处理数组记录数Vu是否大于最小未处理数组记录数Vmin,如果是,说明当前该第1内存队列中的未处理数组记录数介于Vmin和Vmax之间,读表进程不写入表数据到该第1内存队列中,接口系统直接执行第八步2125,否则接口系统执行第四步2123;第四步2123,判断该第1内存队列内的未处理数组记录数Vu是否等于最大未处理数组记录数Vmax,如果等于,则说明该第一内存队列未处理数组记录数已达到最大值,不允许再写入表数据,接口系统跳到第八步2125,查找第2内存队列的未处理记录数情况,否则,说明该第1内存队列还有空闲数组可允许写入表数据,执行第五步2124;第五步2124,将读取到的数据库表数据写入该第1内存队列中;第六步2112,数据成功写入该第1内存队列后,接口系统执行第六步2112,读取该归属位置寄存器(HLR)序号N的下一条表数据;第七步2113,判断读取该归属位置寄存器序号N的表数据是否成功,若不成功,执行第十三步2114,停止读取该归属位置寄存器序号N的表数据,若成功,则执行第一步2120,进行下一轮的写入内存队列数组的判断与操作;第八步2125,开始对该归属位置寄存器序号N的第2内存队列进行(图8中内存队列2)写入表数据的程序,对第2内存队列重复第一步,统计该归属位置寄存器序号N的第2内存队列中未处理数组记录数Vu;上述当写表程序从第三步2122进到第八步2125,或写表程序从第四步2123跳到第八步2125时,即对第2内存队列重复对第1内存队列所进行的写表程序开始;
第九步2126,对第2内存队列重复第二步,判断第2内存队列是否是第一次轮询的内存队列,如果是,执行第十步2127,如果不是,则执行第十一步;第十步2127,对第2内存队列重复第三步,判断未处理数组记录数Vu是否大于最小未处理数组记录数Vmin,如果大于,则说明该归属位置寄存器序号N所对应的第1内存队列和第2内存队列的未处理数组记录数都在最小未处理记录数Vmin和最大未处理记录数Vmax之间,执行第十三步2114,停止写入该归属位置寄存器序号N所对应的表数据;第十一步2128,对第2内存队列重复第四步,判断未处理记录数Vu是否等于最大未处理数组记录数Vmax,如果不等于,说明第2内存队列中还能写入数据库表数据,执行第十二步2129,否则执行第十三步2114;第十二步2129,对第2内存队列重复第五步,将表数据写入第2内存队列中;第十三步2114,停止读取该归属位置寄存器N号所对应的表数据;第十四步2115,将需要读取数据的归属位置寄存器序号N加1后,再重复上述写入程序。
按照上述步骤,读表程序顺序判断内存队列的数据存放情况,当至任一内存队列时,若未处理数组记录数Vu>最小未处理记录数Vmin,则不对此内存队列做任何操作,读表进程开始判断下一内存队列的数据存放情况;若内存队列的未处理数组记录数Vu<最小未处理数组记录数Vmin,则读表程序连续多次写入对应此内存队列的表数据直到此内存队列的未处理数组记录数Vu=最大未处理记录数Vmax,或读表程序从数据库表读取数据失败。这样就使得每个内存队列的未处理数组记录数Vu保持在最小未处理记录数Vmin和最大未处理记录数Vmax之间。保证了任一内存队列数据的均衡分布,使每一内存队列的数据在短时间内都能较平等的得到处理。
由于通信进程读取内存数据和将归属位置寄存器执行结果放入内存队列、回写表进程将内存队列中的归属位置寄存器执行指令的结果回写入数据库表中的过程都是根据归属位置寄存器的序号和内存队列的序号按从小到大的顺序依次判断读取和写入的,因此在此不再赘述。
虽然上面根据具体的一个实施例,对本发明的一种提高归属位置寄存器接口系统处理速度的方法进行了具体描述,但本实施例仅仅被视为对本发明的说明而并非用以限定本发明的范围。实际上,本发明的方法也适用于其他需从数据库表中读取数据并和另一系统进行通信的接口系统。应当知道,在不偏离所述技术方案的精髓和范围的情况下,可以作出各种改变、替换和改造,如改变归属位置寄存器对应内存队列的个数,任一内存队列的长度,内存队列和通信程度的对应关系等等。
权利要求
1.一种提高归属位置寄存器接口系统处理速度的方法,连接于数据库表与归属位置寄存器之间建立在服务器内的接口系统执行读表程序、通信程序和回写表程序,其特征在于在接口系统执行的读表程序与通信程序之间加入在服务器的内存中建立内存队列,并将读取数据库表数据写入内存队列中,再将其内存队列中的表数据转换成归属位置寄存器所能执行的指令提交给归属位置寄存器的程序;在接口系统执行的通信程序与回写表程序之间加入将接收归属位置寄存器的指令执行结果写入建立在服务器的内存中的内存队列中,并将内存队列中的归属位置寄存器执行指令的结果回写到数据库表中的程序。
2.根据权利要求1所述的提高归属位置寄存器接口系统处理速度的方法,其特征在于接口系统进行处理的具体步骤是(1)进行读表进程首先根据与接口系统相连的归属位置寄存器的逻辑连接数目,在服务器的内存中建立相同数目的以数组形式存在的内存队列,同时定义包括内存队列对应的归属位置寄存器的序号、内存队列内的数组数量的相关属性;然后进行第一程序,按照归属位置寄存器的序号从小到大的顺序读取数据库表数据;再进行第二程序;根据记录中的归属位置寄存器的序号将读取到的记录写入此序号归属位置寄存器所对应的内存队列中,若此序号归属位置寄存器所对应的内存队列数目大于1个,则按照内存队列的序号从小到大的顺序存放对应归属位置寄存器序号的表数据;(2)进行通信进程首先读取上述存入内存队列中的表数据,将其转换成归属位置寄存器所能接受的指令,并将转换后的归属位置寄存器的指令提交给归属位置寄存器;同时接收归属位置寄存器的指令执行结果,并将接收到的归属位置寄存器的指令执行结果写入到内存队列中;(3)进行回写表进程读取上述存入内存队列中的归属位置寄存器的指令执行结果,并将其回写到数据库表中。
3.根据权利要求2所述的提高归属位置寄存器接口系统处理速度的方法,其特征在于在服务器的内存中创建内存队列的具体步骤是第一步建立内存队列的记录结构,即定义内存队列的记录属性,明确相应记录属性的类型和大小;第二步建立内存队列结构,即定义内存队列属性,明确相应内存队列属性的类型和大小;第三步将内存队列的序号赋值为1;第四步计算对应序号的内存队列的大小,根据内存队列结构、记录结构得出内存队列所需大小为内存队列结构所占字节数+内存队列中的数组数×记录结构所占字节数;第五步利用WIN32操作系统提供的创建文件(CreateFile)函数创建可共享读写的映射文件;第六步利用WIN32操作系统提供的创建文件映射对象(CreateFileMapping)函数,并调用已创建文件的文件句柄创建文件映射对象;第七步当文件映射对象创建成功后,以文件映射返回的句柄作为参数,调用WIN32操作系统提供的映射文件视图(MapViewOfFile)函数为文件映射对象创建视图;第八步将内存队列的序号加1;第九步判断内存队列的序号是否大于需要建立的内存队列数量,若还未大于,则接口系统返回到第四步,继续下一内存队列的创建;否则内存队列创建结束。
4.根据权利要求2所述的提高归属位置寄存器接口系统处理速度的方法,其特征在于读表进程中第一程序从数据库表中读取数据的具体过程是第一步将待读取的归属位置寄存器的序号赋值为1;第二步判断数据库表中对应该归属位置寄存器1是否有需要读取的数据,若没有,不需再读取,执行第十步;若有,则执行第三步;第三步读取对应该归属位置寄存器序号1所对应的数据库表中的记录;第四步判断第三步读取记录是否成功,若不成功,执行第六步;若成功,执行第五步;第五步将读取到的数据库中的记录写入对应该归属位置寄存器1的内存队列中,并判断写入是否成功;若写入成功,执行第二步;若写入失败,执行第六步;第六步停止读取该归属位置寄存器序号1的数据库表数据;第七步将需要读取的归属位置寄存器序号加1;第八步在第七步将需要读取的归属位置寄存器序号加1后,判断归属位置寄存器序号是否大于与接口系统与物理连接的归属位置寄存器的数目,若已经大于,执行第九步;若未大于,执行第二步;第九步将归属位置寄存器序号重新赋值为1,再执行第二步;第十步判断归属位置寄存器的序号是否等于本接口系统与物理连接的归属位置寄存器的数目,若相等,停止读表程序;否则只停止运行该归属位置寄存器序号所对应的表数据的读取。
5.根据权利要求2所述的提高归属位置寄存器接口系统处理速度的方法,其特征在于读表进程中,将读取到的数据库表数据写入内存队列数组中的具体步骤是首先确定归属位置寄存器的序号N,确定针对此序号N的归属位置寄存器所对应的内存队列数目M,再确定每个内存队列的两个门限值,最小未处理数组记录数(Vmin)和最大未处理数组记录数(Vmax),然后开始写入表数据;第一步统计归属位置寄存器序号N的第1内存队列中未处理数组记录数(Vu);第二步判断是否是第一次轮询第1内存队列,若是第一次,执行第三步;若非第一次,执行第四步;第三步判断该第1内存队列内的未处理数组记录数(Vu)是否大于最小未处理数组记录数(Vmin),如果是大于,执行第八步;否则执行第四步;第四步判断该第1内存队列内的未处理数组记录数(Vu)是否等于最大未处理数组记录数(Vmax),如果是等于,执行第八步;否则执行第五步;第五步将读取到的数据库表数写入该第1内存队列的数组中;第六步读取该归属位置寄存器序号N的下一条表数据;第七步判断读取该归属位置寄存器序号N的表数据是否成功,若不成功,执行第十三步;若成功,执行第一步;第八步对归属位置寄存器序号N的第2内存队列重复第一步,统计归属位置寄存器序号N的第2内存队列的未处理数组记录数(Vu);第九步对第2内存队列重复第二步,即判断是否是第一次轮询第2内存队列,如果是,执行第十步;如果不是,执行第十一步;第十步对第2内存队列重复第三步,判断该第2内存队列中的未处理数组记录数(Vu)是否大于最小未处理数组记录数(Vmin),如果大于,执行第十三步;否则执行第十一步;第十一步对第2内存队列重复第四步,判断该第2内存队列中的未处理数组记录数(Vu)是否等于最大未处理数组记录数(Vmin),如果等于,执行第十三步;否则,则执行第十二步;第十二步对第2内存队列重复第五步,将表数据写入第2内存队列中;第十三步停止读取该归属位置寄存器序号N的表数据,进行第十四步;第十四步将需要读取数据的归属位置寄存器序号N加1后,再重复上述写表程序。
全文摘要
一种提高归属位置寄存器接口系统处理速度的方法,连接于数据库表与归属位置寄存器之间的建立在服务器内的接口系统,在执行的读表程序与通信程序之间加入在服务器的内存中建立的内存队列,并将读取的数据库表数据写入内存队列中,再将其内存队列中的表数据转换成归属位置寄存器所能执行的指令提交给归属位置寄存器的程序。在接口系统执行的通信程序与回写表程序之间加入将接收归属位置寄存器执行指令的结果写入建立在服务器内存中的内存队列中,并将内存队列中的归属寄存器执行指令的结果回写到数据库表中的程序。本发明充分发挥各程序的协同速度,提高了接口系统的处理速度,减少了归属位置寄存器的空闲等待时间。
文档编号H04L12/00GK1658162SQ20051002464
公开日2005年8月24日 申请日期2005年3月25日 优先权日2005年3月25日
发明者罗益书 申请人:上海高智软件系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1