背景技术
在第二代移动通信网络中,用户一次通话可能需要较长时间,或者通过通用分组无线业务(GPRS,General Packet Radio Service)长时间占用网络资源,则服务系统会以一定的时间段为间隔为用户生成多张部分话单,因此,用户一次通话或一次上网会产生多张部分话单。为了使用户得到清楚的话单,这些话单需要尽可能地合并为一张话单,并最终显示给用户。一次通话或一次上网的多张部分话单是由相同的设备产生的,它们格式相同,因此,将这些部分话单直接进行合并后,以一张话单的形式显示在用户的帐单上,以供用户查询。
而来源于不同设备的多张部分话单,它们的格式不同,因此不能直接进行话单合并处理。以下以第三代移动通信网络系统中的因特网协议多媒体子系统(IMS,IP Multimedia Subsystem)话单和通用分组无线业务(GPRS,General Packet Radio Service)话单的合并为例进行详细说明。
第三代移动通信网络系统支持IMS。IMS是3G系统中的核心网的一部分,它通过由会话初始化协议(SIP,Session Initiation Protocol)提供的会话发起能力,建立端到端的会话,并获得所需要的服务质量。IMS通过将控制和承载分离,由分组交换域(PS,Packet-Switched domain)核心网提供SIP信令和媒体数据的承载,由IMS的核心部分提供会话和业务的控制,使得采用不同接入手段接入到PS的用户能够通过一张融合的核心网络,来使用运营商提供的各类语音、数据和多媒体业务以及新的应用业务。
IMS的分层结构一般包括三层:控制层、应用层及接入层。其中接入层用于实现IMS终端的接入。控制层不提供业务,它只提供业务层必要的触发、路由、计费等功能,其中呼叫会话控制功能(CSCF,Call Session ControlFunction)模块完成呼叫网关功能、呼叫业务触发功能和路由选择功能,将SIP信令消息正确地转发到应用服务器。应用层支持各类应用服务器,负责为用户提供多媒体业务,该层独立于网络的接入层、控制层存在,保证业务开发和提供的独立性。由于IMS的分层设计,IMS会话管理实体(例如CSCF)并不知道IMS会话在应用层的业务流量,而IP连接实体(例如GGSN等)也不了解IMS控制层信令的状态。从运营商的角度来看,希望能够将应用层和控制层的计费信息关联起来进行统一计费。
在IMS体系中,通过Go参考点交换并保存业务SIP信令的IMS计费标识符(ICID)和该业务IP流的GPRS计费标识符(GCID),即在IMS话单中加入GCID,在GPRS话单中加入ICID信息,作为关联信息,从而实现IP流和SIP信令的计费关联。
图1为现有技术中话单合并系统与下游计费系统之间的关系。如图1所示,在IMS和GPRS生成话单后,输入到话单合并系统中进行处理,然后输出到下游计费系统。
由于话单来源于不同的设备,因此在进行话单合并时,各设备产生相关联的话单的时间不同,传输到话单合并系统的时间也就会不同,因此会在关联的话单进行合并时产生同步问题。例如,IMS话单由于设备处理速度较快,生成的话单已经到达话单合并系统,但是GPRS话单还没有到达,那么首先到达的IMS话单就需要保存到内存的缓冲队列中,以等待GPRS话单到齐后才能进行合并。这样,缓冲队列占用的存储空间会比较大。同时,由于在计算机系统重新启动后,内存中的内容将会丢失,因此为了话单处理的完整性,需要在每个包含多条话单的文件处理结束后,对缓冲队列进行实时保存,即将缓冲队列的状态保存到永久性存储中去,例如磁盘,以便于在系统出现故障重新启动后,恢复永久性存储中的缓冲队列,继续对其中的话单进行处理,从而避免丢失话单或重复话单的问题。
图2为现有技术中进行话单合并的方法流程图。如图2所示,该方法包括以下步骤:
步骤200:判断话单是否需要关联,如果需要关联,则执行步骤201;否则执行步骤202。
在本步骤执行之前,话单合并系统接收到的是一个包含多条话单的文件,话单合并系统对于这样的文件,针对各条话单分别进行处理。
以GPRS和IMS话单的关联为例,本步骤中,判断IMS话单中是否有关联信息GCID,GPRS话单中是否有关联信息ICID,如果有这样的关联信息,则说明该话单是需要进行关联的话单。
步骤201:根据作为关联信息的计费标识符在缓冲队列查找对应的话单组,如果查找到对应的话单组,则执行步骤203;否则执行步骤204。
本步骤中,话单组是一次会话过程中产生的多条话单的集合,这些话单的格式可能不相同,每条话单都有对应的格式;话单组内的话单具有相关联的计费标识符。
缓冲队列是一个内存的等待队列,对于需要合并的话单,要先在缓冲队列中等待,当所有话单都来齐时才进行关联。
步骤202:将该话单输出,然后结束话单合并流程。
步骤203:将该话单加入查找到的话单组中,并判断该话单组的话单是否齐全,是则执行步骤205;否则执行步骤206。
步骤204:创建新的话单组,并加入到缓冲队列等待其它话单;然后执行步骤207。
步骤205:合并相互关联的话单,输出合并后的话单,然后执行步骤207。
步骤206:该话单组在缓冲队列中继续等待,然后执行步骤207。
步骤207:修改缓冲队列的状态,然后结束话单合并流程。
现有技术中每处理一条话单后,执行步骤207修改缓冲队列的状态,包括执行步骤205后,将已经合并从而不需要继续在缓冲队列中等待其它话单的话单,从缓冲队列中删除;以及执行步骤204和步骤206之后,将新增话单增加到当前缓冲队列,在处理完包含多条话单的一个文件之后,将缓冲队列的状态保存到永久性存储中,例如磁盘,其保存的方法是将缓冲队列中的所有的话单进行完全保存,每次处理完毕一个文件之后,都会重新对缓冲队列进行完全保存,这样在缓冲队列包含很多话单,其容量非常大,例如为几十M至几百M时,每次都需要保存几十M至几百M的话单数据,从而减慢了话单处理的速度,影响了处理性能;且频繁的对磁盘进行存储操作,降低了磁盘的使用寿命。
发明内容
有鉴于此,本发明实施例提供一种保存缓冲队列状态的方法,加快话单合并的处理速度。
本发明实施例提供一种保存缓冲队列状态的装置,加快话单合并的处理速度。
本发明实施例还提供一种话单合并的方法,加快话单合并的处理速度。
本发明实施例还提供一种话单合并的装置,加快话单合并的处理速度。
为达到上述目的,本发明实施例的技术方案是这样实现的:
一种保存缓冲队列状态的方法,预先为每个需要在缓冲队列中等待的话单分配一个话单标识ID;将新加入到缓冲队列的话单的话单ID保存到话单ID队列中;该方法包括:
将新加入缓冲队列的话单的话单信息保存为临时话单文件,将话单ID队列保存为ID队列文件。
一种保存缓冲队列状态的装置,包括分配模块、缓冲模块和存储模块,其中,
分配模块,用于为每个需要在缓冲模块的缓冲队列中等待的话单分配一个话单标识ID;
缓冲模块,用于保存缓冲队列及话单ID队列,缓冲队列包括新加入到缓冲队列的话单,话单ID队列包括该话单对应的话单ID;
存储模块,用于将新加入到缓冲模块中缓冲队列的话单的话单信息保存为临时话单文件,将缓冲模块的话单ID队列保存为ID队列文件。
一种话单合并的方法,包括:
判断是否能够在缓冲队列中查找到需要关联的话单对应的话单组,如果查找不到对应的话单组,则为所述需要关联的话单创建新的话单组,将所述话单组及需要关联的话单加入到缓冲队列中等待,为所述需要关联的话单分配一个话单标识ID,将该话单ID保存到话单ID队列;
如果能够查找到对应的话单组,将所述需要关联的话单加入对应的话单组,当所述话单组的话单齐全时,合并所述话单组的话单;
将新加入缓冲队列的话单的话单信息保存为临时话单文件,将所述话单ID队列保存为ID队列文件。
一种话单合并的装置,包括查找模块、创建模块、分配模块、缓冲模块、合并判断模块、合并模块及存储模块,
查找模块,用于判断是否能够在缓冲队列中查找到需要关联的话单对应的话单组,查找不到则向创建模块发送创建话单组的触发信息,向分配模块发送分配话单标识ID的触发信息;能够查找到,则向合并判断模块发送进行判断的触发信息;
创建模块,用于在接收到创建话单组的触发信息时,创建与所述话单对应的话单组,并将所述话单及对应的话单组加入到缓冲模块的缓冲队列;
分配模块,用于在接收到分配话单ID的触发信息时,为所述话单分配话单ID,并将该话单ID保存到缓冲模块的话单ID队列;
缓冲模块,用于保存缓冲队列和话单ID队列,缓冲队列包括新加入到缓冲队列的话单,话单ID队列包括缓冲队列的话单对应的话单ID;
合并判断模块,用于在接收到进行判断的触发信息时,将所述话单加入对应的话单组,判断所述话单组的话单是否齐全,是则向所述合并模块发送进行话单合并的触发信息,否则向所述分配模块发送分配话单ID的触发信息,并将所述话单加入所述缓冲模块的缓冲队列;
合并模块,用于在接收到进行话单合并的触发信息时,合并所述话单组的话单;
存储模块,用于将新加入到缓冲模块的缓冲队列中的话单的话单信息保存为临时话单文件,将缓冲模块的话单ID队列保存为ID队列文件。
与现有技术相比,本发明实施例所提供的技术方案,在将缓冲队列的状态保存到永久性存储中时,只需要保存在内存的缓冲队列中等待的话单对应的话单ID队列,以及新加入到缓冲队列的话单,而不需要每次处理完包含多条话单的一个文件之后,都对缓冲队列中的话单进行完全保存,从而节省了保存缓冲队列状态的时间,加快了话单合并的处理速度,提高了话单处理性能。
具体实施方式
下面结合附图及具体实施例对本发明进行详细说明。
本发明实施例中保存缓冲队列状态的方法首先为每个在缓冲队列中等待的话单分配一个话单标识(ID),将新加入到缓冲队列的话单的话单ID保存到话单ID队列中,保存该新加入到缓冲队列的话单的话单信息为临时话单文件,保存该话单ID队列为ID队列文件。从而,当包含多条话单的一个文件处理结束需要保存缓冲队列的状态时,永久化存储缓冲队列中的话单ID队列,并将该新加入到缓冲队列的话单的话单信息保存到临时话单文件中,从而保存到永久化存储介质中去。
图3为本发明实施例中的保存缓冲队列状态的方法流程图。如图3所示,该方法包括以下步骤:
步骤300:为新加入到内存的缓冲队列中的话单分配一个话单ID。
当处理一个新的需要关联的话单时,在缓冲队列中没有查找到与该话单对应的话单组,需要创建新话单组时,把新话单组的话单加入到缓冲队列之后,执行本步骤。
或者当在缓冲队列中查找到与该需要关联的话单对应的话单组,向该话单组中增加该话单,并且该话单组需要继续等待时,执行本步骤。
步骤301:将该话单的话单ID增加到内存的话单ID队列中。
步骤302:当包含多条话单的文件处理结束后,将保存在内存中的缓冲队列对应的话单ID队列保存为ID队列文件,并将处理该文件时新加入到缓冲队列的话单的话单信息保存为临时话单文件,例如保存到磁盘上。
当包含多条话单的一个文件处理完毕后,执行本步骤。
本步骤中,将永久性存储中保存的话单ID队列刷新为当前缓冲队列中的话单对应的话单ID队列;并将处理该文件时新加入到缓冲队列的话单的话单信息保存为临时话单文件,该话单信息包括:话单ID、话单的关联操作信息、话单格式以及话单内容。因此,在每次处理完一个文件后,只需要刷新永久性存储中占用空间很小的话单ID队列,并在永久性存储中保存新加入到缓冲队列中的话单信息,而不需要每次保存容量较大的整个缓冲队列,从而节省了话单处理的时间。
当某个话单组关联完毕,需要从内存的缓冲队列中删除时,将该话单组在缓存队列中的话单进行清理之后,从缓冲队列删除已经合并过的所有话单,并从话单ID队列中删除这些话单的话单ID,在处理完包含多条话单的一个文件后,将永久性存储中的ID队列文件刷新为当前缓冲队列的话单对应的话单ID队列,并将处理该文件时新增加到缓冲队列的话单保存为临时话单文件。
以下详细说明将本发明实施例提供的保存缓冲队列的方法应用于话单合并中的过程。图4为本发明实施例中话单合并的方法流程图,如图4所示,该方法包括以下步骤:
步骤400:判断话单是否需要关联,如果需要关联,则执行步骤401;否则执行步骤402。
以GPRS和IMS话单的关联为例,本步骤中,判断IMS话单中是否有关联信息GCID,GPRS话单中是否有关联信息ICID,如果有这样的关联信息,则说明该话单是需要进行关联的话单。
步骤401:根据作为关联信息的计费标识符在缓冲队列查找对应的话单组,如果查找到对应的话单组,则执行步骤403;否则执行步骤404。
话单组内的话单具有相关联的计费标识符,话单组的关键字是这些话单的计费标识符,因此,本步骤中,查找对应的话单组是指查找在关键字中是否包含有该话单计费标识符的话单组。
步骤402:将该话单输出,然后结束话单合并流程。
步骤403:将该话单加入查找到的话单组中,并判断该话单组的话单是否齐全,是则执行步骤405;否则执行步骤406。
本步骤中,判断该话单组的话单是否齐全是指判断该话单组的关键字对应的话单是否都齐了。
步骤404:创建新的话单组,并加入到缓冲队列等待其它话单;然后执行步骤408。
本步骤中,在创建话单组后,将该话单的计费标识符及关联的计费标识符都加入到话单组的关键字中。
步骤405:合并相互关联的话单,输出合并后的话单,然后执行步骤407。
步骤406:该话单组在缓冲队列中继续等待,然后执行步骤408。
步骤407:从缓冲队列中清除话单组的话单,从话单ID队列中删除话单组的话单对应的话单ID,然后结束话单合并流程。
步骤408:将该话单加入缓冲队列,为该话单分配话单ID,将该话单ID保存到话单ID队列,然后结束话单合并流程。
当按照上述流程处理完包含多个话单的一个文件后,将永久性存储中的ID队列文件刷新为当前缓冲队列的话单对应的话单ID队列,并将处理该文件时新增加到缓冲队列的话单保存为临时话单文件。
由于本发明实施例将增加到缓冲队列等待的话单进行了保存,并同时保存了内存中缓冲队列的话单对应的话单ID队列,从而使得在话单处理过程中话单合并系统发生故障导致系统重新启动时,能够安全恢复缓冲队列的状态,即满足缓冲队列一致性原理。图5为缓冲队列一致性原理图。如图5所示,文件A处理结束后,磁盘上保存缓冲队列的状态记为a。下一个处理的文件是B,在文件A处理结束到文件B处理前,程序异常退出,那么下次启动恢复时,从磁盘上恢复的是A文件处理后的状态,即状态a。系统继续处理B文件,不会产生话单丢失或者重复话单的情况。如果在文件B处理过程中退出,这时磁盘上缓冲队列的状态仍然为a,在下次启动恢复时,从磁盘上恢复的仍是A文件处理后的状态,即状态a,而由于在程序异常退出时,文件B还没有处理完毕,因此重新处理B文件,不会产生话单丢失或者重复话单的情况。
以下详细说明系统启动时恢复缓冲队列的过程。
系统在启动时,从磁盘读入上次系统退出前保存的ID队列文件,恢复上次系统退出前内存中缓冲队列对应的话单ID队列;扫描所有的临时话单文件,例如从临时话单文件中读入每条话单的话单信息,包括话单ID,话单的关联操作信息、话单格式和话单内容;然后,根据该话单ID队列以及临时话单文件中的话单ID,判断临时话单文件中的话单是否需要进入缓冲队列。如果一条话单的话单ID在话单ID队列中存在,则该话单在系统故障之前还在缓冲队列中等待,判定该话单需要进入缓冲队列,然后把该话单恢复到缓冲队列中;如果该话单的话单ID没有在话单ID队列中存在,则判定该话单已经处理完毕,不需要进入缓冲队列。
由于在一条话单处理结束,从内存的缓冲队列删除该话单时,也同时从话单ID队列中删除该话单的话单ID,在处理一个文件结束,将内存中的话单ID队列保存为ID队列文件,因此,在ID队列文件中保存的话单ID所对应的话单是还在缓冲队列中等待的话单。
图6为系统启动时缓冲队列的恢复原理图。如图6所示,ID队列文件中保存的话单ID为11、22、23、n1和n2等,根据该ID队列文件恢复缓冲队列时,只恢复在临时话单文件中保存的ID为11、22、23、n1和n2的话单即可,其它的在临时话单文件中保存了但在ID队列文件中没有对应话单ID的话单是已经被处理完毕,从缓冲队列中删除的话单。
在话单处理过程中,如果某个设备上的话单产生异常,例如IMS中产生话单的设备发生故障,则会导致与该设备相关的合并未完成的话单组不能正常合并,如果不进行清理,这样的话单组就会在缓冲队列中一直等待下去,因此本发明实施例还可以进一步包括对缓冲队列进行定时清理,包括:周期性扫描缓冲队列,对每个话单组进行超时判断,如果该话单组没有超时,则在缓冲队列中继续等待;如果该话单组已经超时,则将该话单组内的所有话单按原来的格式输出,并将该话单组从缓冲队列中删除,并将该话单组内所有话单对应的话单ID从话单ID队列中删除。其中,对话单组进行超时判断的方法为现有技术,在此不再赘述。
本发明实施例中保存缓冲队列状态的方法还可以进一步包括:在内存中建立一个临时文件列表,临时文件列表记录的是每个临时话单文件在缓冲队列中对应的话单数目。在处理包含多条话单的一个文件过程中,每处理完一条话单后修改缓冲队列的状态时,如果向话单ID队列中增加了话单ID,则将该临时文件列表中对应于该文件的话单数目加1,如果是从话单ID队列中删除话单ID,即从缓冲队列中删除了话单,则将该临时文件列表中对应于该文件的话单数目减1。在处理以后接收到的文件时,如果处理该文件后,保存的临时话单文件中的某一条话单被清除了,则话单ID队列中该话单对应的话单ID也不存在了,此时,临时文件列表中保存的该临时话单文件对应的话单数目也会减1,如果检测到临时文件列表中与临时话单文件对应的话单数目为0,则表明该临时话单文件已经没有话单在内存的缓冲队列中等待了,同时由于该话单在该话单合并系统经过处理后,已经输出到下游的话单处理系统进行处理,保存在该话单合并系统中的临时话单文件也已经没有其他作用,因此删掉该临时话单文件,从而避免了临时话单文件过多的问题。
图7为本发明实施例中的保存缓冲队列状态的装置结构图。如图7所示,该装置包括分配模块、缓冲模块及存储模块,其中,
分配模块,用于为每个需要在缓冲模块的缓冲队列中等待的话单分配一个话单ID;
缓冲模块,用于保存缓冲队列和话单ID队列,缓冲队列包括新加入到缓冲队列的话单,话单ID队列包括缓冲队列的话单对应的话单ID;
存储模块,用于将新加入到缓冲模块中的缓冲队列的话单的话单信息保存为临时话单文件,将缓冲模块话单ID队列保存为ID队列文件。
本发明实施例提供的保存缓冲队列状态的装置还包括清理模块,用于将需要清理的话单从缓冲模块的缓冲队列中清除,将该需要清理的话单的话单ID从缓冲模块的话单ID队列中清除。
进一步地,缓冲模块的缓冲队列进一步保存临时文件列表,用于保存存储模块的临时话单文件在缓冲队列中剩余的话单数目;相应地,该装置还可包括检测模块,用于当检测到临时文件列表是临时话单文件对应的话单数目为0时,删除存储模块中的该临时话单文件。
本发明实施例中保存缓冲队列状态的装置还可包括:读入模块,用于在系统重新启动时,读取存储模块的ID队列文件,将话单ID队列恢复到缓冲模块的缓冲队列中;以及扫描模块,用于扫描存储模块的临时话单文件,根据话单ID队列以及临时话单文件中话单ID,判断临时话单文件中的话单是否需要进入缓冲队列,如果是则将该话单恢复到缓冲队列。
其中需要在缓冲模块的缓冲队列中等待的话单为在缓冲队列的话单组中等待的话单,进一步地,该装置还包括判断模块,用于对每个缓冲队列中的话单组进行超时判断,如果该话单组超时,则向清理模块发送清理该话单组的触发信号;相应地,当清理模块接收到该触发信号后,输出该话单组,并从缓冲模块的缓冲队列中清除该话单组,从缓冲模块的话单ID队列中清除该话单组中的话单对应的话单ID。
图8为本发明实施例中话单合并的装置结构图。如图8所示,该装置包括查找模块、创建模块、分配模块、缓冲模块、合并判断模块、合并模块及存储模块。
其中,查找模块,用于判断是否能够在缓冲队列中查找到需要关联的话单对应的话单组,查找不到则向创建模块发送创建话单组的触发信息,向分配模块发送分配话单标识ID的触发信息;能够查找到,则向合并判断模块发送进行判断的触发信息。
创建模块,用于在接收到创建话单组的触发信息时,创建与该话单对应的话单组,并将该话单及对应的话单组加入到缓冲模块的缓冲队列。
分配模块,用于在接收到分配话单ID的触发信息时,为该话单分配话单ID,并将该话单ID保存到缓冲模块的话单ID队列。
缓冲模块,用于保存缓冲队列和话单ID队列,缓冲队列包括新加入到缓冲队列的话单,话单ID队列包括缓冲队列的话单对应的话单ID。
合并判断模块,用于在接收到进行判断的触发信息时,将该话单加入对应的话单组,判断该话单组的话单是否齐全,是则向合并模块发送进行话单合并的触发信息,否则向分配模块发送分配话单ID的触发信息,并将该话单加入缓冲模块的缓冲队列。
合并模块,用于在接收到进行话单合并的触发信息时,合并该话单组的话单。
存储模块,用于将新加入到缓冲模块的缓冲队列中的话单的话单信息保存为临时话单文件,将缓冲模块的话单ID队列保存为ID队列文件。
该装置可进一步包括清理模块,用于将合并的话单组的话单从缓冲模块的缓冲队列中清除,将合并的话单组的话单的话单ID从缓冲模块的话单ID队列中清除。
以上所述可以看出,本发明实施例所提供的技术方案,在每次处理完包含多条话单的一个文件之后,将永久性存储的ID队列文件刷新为当前在缓冲队列中等待的话单对应的话单ID队列,并将新加入到缓冲队列的话单保存到永久性存储中去,而不是将整个缓冲队列中的所有话单重新存储一次,从而减小了保存缓冲队列状态的时间,提高了话单处理速度。同时,大大减少了磁盘的写操作,减少了对磁盘及磁盘输入/输出接口(I/0)的损坏。
另外,本发明实施例提供的技术方案,在系统故障排除重新启动恢复缓冲队列时,根据保存的话单ID和临时话单文件,恢复内存中的缓冲队列,从而在话单处理过程中不会丢失话单和产生重单。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。