基于内存的海量话单快速交叉排重方法

文档序号:7962056阅读:190来源:国知局
专利名称:基于内存的海量话单快速交叉排重方法
技术领域
本发明属于电信运营商大规模准确数据处理应用技术范畴。
背景技术
由于目前电信运营商计费系统多采用全省集中的模式,话单数量极大,例如某省电信公司一个月的话单数据达到10亿条,按照电信惯例,需排除三个月以内的重复话单,因此对重复话单过滤技术要求就很高。
原先重复话单仅仅局限于完全重复话单,完全重复话单就是指2条话单的复合主键完全一致,例如A话单和B话单的主叫号码、被叫号码、通话开始时间完全一致。现在随着电信运营商服务质量的提高,重复话单还包括交叉话单,交叉话单是指话单的主被叫号码完全一致,但是呼叫时间有交叉的情况,例如A话单和B话单主叫号码、被叫号码完全相同,但是A话单的通话起始时间在B话单的通话起始时间和结束时间之间或者A话单的通话结束时间在B话单的通话起始时间和结束时间之间,这样的话单就是交叉话单。完全重复话单其实是交叉话单的特例。
前几年,电信运营商对于排重还局限于完全排重的时候,国内外的电信计费产品厂家和数据库厂家一起探讨,通过数据库来实现完全重单的排重,这项技术充分利用数据库分区和索引技术,能够将完全重单快速定位。这种技术对于完全排重效果较好,但是对于交叉排重就一筹莫展。
国内外的电信计费产品厂家一直致力于交叉排重技术的研究,但是在处理效率和处理的灵活性上至今差强人意。目前基于内存排重的计费厂家技术实现如图1所示是二级缓存的机制,在内存页面中保存几个小时的话单,查询的时候直接在内存取,取不到话单就需要进行内存和磁盘的换页操作。这个思想基于话单流基本上是按照时间序列经过流程,少量的时间扰动,总体上不影响效率。该技术在实际应用中的效果,取决于换页是否频繁,换页的I/O是一个流程中的瓶颈。对于某些超长时长的话单进行交叉排重的处理效率不够理想,对于漫游话单的时间跳跃很大,交叉排重效率也不理想。
经过多年的实践,可以得出这样的结论,使用数据库进行交叉排重,效率非常低,交叉排重必须基于内存。
现有电信计费业务性能瓶颈重单剔除和计费中客户资料查找,研究他们的不足.结合键树索引技术,电信业务中基于键树索引技术的数据组织方式,能有效的提高计费的实时性,有效解决了实时计费的准确性和性能之间的矛盾,适应电信业务发展的需求,但基于数据库进行单纯的交叉排重并不能解决问题。
基于内存的交叉排重必须满足
1、保证处理效率,能够满足目前省级电信公司每月10亿数量级的话单排重处理要求;2、排重规则可以配置,满足排重规则的复杂性;3、内存空间的优化,有限的内存空间最大限度的存储排重过程中使用的数据;4、由于内存空间的有限性,在内存空间无法存储所有历史话单索引的情况下,能够实现磁盘空间存储。
保证异常情况下,系统正常回滚和恢复;可以实现并行分布式处理。那么如何提高系统的处理效率?发明内容本发明目的是提出一种实现高效的基于内存的海量话单交叉排重的方法和设计。
基于内存的海量话单数据交叉排重方法,采用内存的多级存储机制、基于二叉平衡树(AVL)和键树的索引技术、基于BCD码和RLC(Run-Length Coding)算法的压缩技术和基于时间片的交叉排重方法相结合的过程所述多级存储机制采用三级存储机制第一级为内存中的工作集窗口,第二级为内存中的压缩排重信息,第三级为磁盘;在一级和二级存储之间的换入和换出只是解压缩和压缩,在二级和三级存储通过内存映射方法来实现;交叉排重时采用基于二叉平衡树(AVL)和键树的索引方法系统将每个时间片设置成几分钟到一至二个小时的排重信息形成文件,换进换出的时候通过二叉平衡树索引查找所需要的时间片对应的排重文件信息;一个排重文件调入一级内存存储以后,系统对于这个排重文件内的每条排重信息根据主叫号码建立键树;基于BCD码和RLC(Run-Length Coding)算法的压缩方法RLC针对无损压缩的算法,它用重复字节和重复的次数来简单描述来代替重复的字节;基于命中统计的LRU算法不同级存储之间进行换进换出的单位是一个时间段的排重信息,在一级存储里面进行命中统计,实时统计每个时间段排重信息访问的次数,根据访问次数大小决定哪个时间片排重信息被调出;在二级存储里面,根据时间(从一级存储调到二级存储的时间)决定哪个时间片排重信息被调到磁盘上。
本排重方法和系统的特点体现在基于内存的多级存储机制、基于二叉平衡树(AVL)和键树的索引技术、基于BCD码和RLC(Run-Length Coding)算法的压缩技术、基于命中统计的LRU算法、分布式并行处理机制、基于文件事务的回退机制、可以灵活配置的排重规则、基于时间片的交叉排重等。
本排重系统需要存储的是历史话单的排重信息,排重信息指的是该话单参加排重处理的关键字段,一般包括主叫号码、被叫号码、通话开始时间、通话时长等。


图1是排重数字的示意2是本发明排重系统示意3是主叫号码的主键的键树模型4模型中定义了进程和重单规则的关系,重单的判定规则,时间片文件信息,以及不需要排重的serv(用户)和product(产品)信息等。
图5是交叉排重的排重规则的配置界面。在图5中,系统支持用户配置不同的重单类型以及不同重单类型对应的排重稽核规则。
具体实施例方式
多级存储机制本排重系统如图2所示,采用三级存储机制。第一级为内存中的工作集窗口,第二级为内存中的压缩排重信息,第三级为磁盘。在一级和二级存储之间的换入和换出没有涉及I/O,只是解压缩和压缩,在二级和三级存储通过内存映射(memmap)技术实现。
基于二叉平衡树(AVL)和键树的索引技术系统将每个时间片(时间片长度可以配置,可设置成几分钟到一二个小时,例如设置成半个小时)的排重信息形成文件,换进换出的时候通过二叉平衡树索引查找所需要的时间片对应的排重文件信息。二叉平衡树即AVL树(也称作平衡树),在这种树型结构中,二叉树结构近似于平衡。AVL树具有如下特征根的左子树和右子树的高度差的最大值为1;根的左子树和右子树都是AVL树。AVL树中不允许出现重复值,这正是的欲达到的目的。
系统对于每个排重文件内的排重信息采用键树做索引。一个排重文件调入第一级内存以后,系统建立键树索引,采用排重文件内的每条排重信息的主叫号码作为关键字。关键字中的各个符号分布在从根结点到叶的路径上,叶结点内的符号为“结束”的标志符。因此,键树的深度和关键字集合的大小无关。键树被约定为是一棵有序树,即同一层中兄弟结点之间依所含符号自左至右有序,如图3所示。一般情况下多条信息查询的时间复杂度为0(n),n指排重信息条数,键树的查询时间复杂度是0(1),1是主叫号码的长度。
基于BCD码和RLC(Run-Length Coding)算法的压缩技术压缩的可行性文本的压缩率非常高,况且在计费系统中,排重信息都是数字,所以二级存储内存中排重信息用BCD码存储,1个字节可以存储2个数字,压缩率可以达到50%。
RLC是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。例如出现六次的符号‘3’用BCD码和RLC算法,只需要1.5个字节来代替一个标记(例如使用半个字节‘F’作为标记,因为原始的排重信息不会出现‘F’),重复的次数(这里重复的次数是6,使用半个字节)和符号本身(‘3’,使用半个字节)。系统针对每条排重信息,读取第1个字符,同时启动统计变量(初始化值为1),如果后面一个字符跟这个字符如果相同,统计变量就累加,继续读取后续字符,直到后续的字符出现不一样的情况,这个时候,首先把这个字符和重复次数写到压缩字符串里面,然后继续针对下面的字符重复上述的统计工作。最终形成这条排重信息的RLC压缩结果。
排重信息全部都是数字,如果系统需要将某个时间片的排重信息从一级工作窗口内存存储到二级存储,那么采用压缩技术,首先使用上述的RLC算法进行压缩,然后将压缩结果由ASCII码转换成BCD码。通过这样的压缩技术,压缩比可以达到3∶1。
相反,如果从二级存储调入一级工作集窗口内存,通过简单的解压缩的处理,首先,将每条排重信息由BCD码转换成ASCII码,然后采用RLC的解压缩算法进行处理。这样一方面适当降低内存空间的占有,另一方面处理效率优于从磁盘调入内存的I/O操作。
基于命中统计的LRU算法不同级存储之间进行换进换出的单位是一个时间段的排重信息,在一级存储里面进行命中统计,实时统计每个时间段排重信息访问的次数,根据访问次数大小决定哪个时间片排重信息被调出;在二级存储里面,根据时间(从一级存储调到二级存储的时间)决定哪个时间片排重信息被调到磁盘上。
当有一个时间片的排重文件从磁盘或者二级存储调进一级存储内存,系统就生成该时间片的统计变量,统计其在一级内存里面被访问的次数,系统每访问这个排重文件内的信息一次,统计变量就实时累加一次。
当有一个时间片的排重信息从一级存储内存调到二级存储内存的时候,系统记录该时间片的时间。
当系统需要换进换出的时候使用LRU(最近最少使用)算法,确定哪个时间段的排重信息需要换出。
对于一级存储调用到二级存储,根据命中统计的统计值,将最小统计值对应的时间片调到二级存储。对于二级存储调到磁盘,根据时间将最先从一次存储调到二级存储的时间片文件调到磁盘上。
这个算法的出发点是局部性原理,如果某个时间段每访问了,则它可能马上就要被访问。这种算法降低了系统颠簸的可能性。
分布式并行处理机制如何有效地提高系统处理效率?一方面提高单进程的处理效率,另一方面利用现有主机多CPU的优势,进行多进程并行处理技术。本系统是全面的分布式系统,通过专有的根据大容量数据特点进行设计的数据处理引擎和核心中间件技术,采用并行处理方式,使得多个排重进程(也可以分布在多台机器多进程)协同并行操作。
联创计费产品通过核心中间件技术中的负载均衡计划,会将排重的负载均衡地分担到各台服务器或者各个排重引擎。负载均衡计划同时保证排重的准确性,负载均衡函数保证同一主叫的排重数据在一个排重引擎中处理。
基于文件事务的回退机制系统发生异常故障,如何恢复?系统采用基于文件事务的回退机制,当一个待排重的文件全部处理完毕,把该文件生成的排重信息进行提交,刷新到磁盘上,成功后才对该文件进行提交。
可以灵活配置的排重规则不同地区的电信运营商的排重策略存在一定的差异性,例如有些电信运营商只需要完全排重,有些电信运营商需要交叉排重。排重的字段也有所不同,有些运营商需要将通话时长加入到排重字段,有些运营商需要将交换机标识加入到排重字段。
本系统在排重规则上分为完全排重和交叉排重规则配置,每种排重规则可以设置不同的排重字段和排重条件。系统还可以设置特定的产品或者商品、特定的用户不参加排重。
系统单独将完全排重列出来的原因是,如果只是单独的完全排重(完全排重是要求待排重话单和历史话单通话起始时间完全一致),那么排重的话单只需要与具体一个时刻的话单进行排重,而不需要和其他时刻的话单进行对比。而交叉排重需要将待排重话单和此排重话单通话时间有重叠的历史话单进行比较过滤。
基于时间片的交叉排重为了实现交叉话单的排重,以及应对交叉的多种方式,系统引入基于时间片的交叉排重信息,又称作为时主键话单。系统将跨时间片(时间片的长度可以设置,目前设置为半小时)的话单按照时间片切割成多条排重信息,每条排重信息有自己对应的时间片。
系统进行交叉排重时,首先求取待排重的话单涉及的时间片,然后在必要的情况下根据AVL索引调入涉及的时间片的历史排重信息文件,根据键树查找该主叫号码在所有时间片文件内的话单,根据交叉排重规则,进行比较和判定。
采用基于内存和结合以上技术方案的排重系统处理效率明显提高。
以下是排重效率的测试情况。
测试环境IBM P650 16*1.5G CPU,32G RAMOracle 9i数据库,16G SGA测试对象待入库文件数为10000个,共有45240988条记录。
测试方法将文件放置于排重进程输入目录;启动1个排重进程,记录开始时间;监控输入目录的文件个数直至为零,记录结束时间。
测试结果基于数据库的交叉排重测试系统耗时86669秒排重入库速度45240988÷86669约=522条/秒基于内存的交叉排重测试(包括一级存储和二级存储的内存配置存放10000000的排重记录)系统耗时4467秒排重入库速度45240988÷4467约=10127条/秒测试结论基于内存的交叉排重技术明显优于基于数据库的交叉排重技术。系统的数据模型见图4排重系统采用构件化设计思想进行设计,支持融合计费系统Plug and Play(即插即用)的思想。
如图9所示,融合计费系统支持流程和进程的的自定义和部署。
排重模块部署步骤在融合计费系统中,插入排重构件,将预处理进程作为排重的输入,将批价进程作为排重的输出。系统支持定义多个排重进程并行处理。在流程控制图中(见图9)配置排重的负载均衡策略,。
在配置界面上配置不同的排重策略,如图5所示。
在配置界面上配置不同排重进程与排重策略的对应关系,如图6所示。
在配置界面上配置时间片的长度、一级存储和二级存储中排重信息的容量、时间片排重文件存放地址等,如图7所示;在配置界面上配置不需要排重的用户和产品信息,以及稽核信息,如图8所示。
部署完毕以后,启动排重进程,排重进程就根据配置信息将历史时间片排重文件读入一级和二级存储,开始排重。
如果系统仅仅要求完全排重,系统只需要跟通话起始时间所在时间片文件内的历史排重信息进行排重处理。如果系统要求交叉排重,系统需要将待排重话单从通话开始时间到结束时间所涉及的时间片文件全部调入到内存,进行排重处理。
内存映射(memmap)技术是现有技术通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
内存映射文件并不是简单的文件I/O操作,如通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。在用CreateFile()将文件映像在物理存储器的位置通告给操作系统后,只指定了映像文件的路径,映像的长度还没有指定。为了指定文件映射对象需要多大的物理存储空间还需要通过CreateFileMapping()函数来创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式。在创建了文件映射对象后,还必须为文件数据保留一个地址空间区域,并把文件数据作为映射到该区域的物理存储器进行提交。由MapViewOfFile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间。此时,对内存映射文件的使用和处理同通常加载到内存中的文件数据的处理方式基本一样,在完成了对内存映射文件的使用时,还要通过一系列的操作完成对其的清除和使用过资源的释放。这部分相对比较简单,可以通过UnmapViewOfFile()完成从进程的地址空间撤消文件数据的映像、通过CloseHandle()关闭前面创建的文件映射对象和文件对象。
权利要求
1.基于内存的海量话单数据交叉排重方法,其特征是采用内存的多级存储机制、基于二叉平衡树AVL和键树的索引技术、基于BCD码和RLC算法的压缩技术和基于时间片的交叉排重方法相结合的过程所述多级存储机制采用三级存储机制第一级为内存中的工作集窗口,第二级为内存中的压缩排重信息,第三级为磁盘;在一级和二级存储之间的换入和换出只是解压缩和压缩,在二级和三级存储通过内存映射方法来实现;交叉排重时采用基于二叉平衡树AVL和键树的索引方法系统将每个时间片设置成几分钟到一至二个小时的排重信息形成文件,换进换出的时候通过二叉平衡树索引查找所需要的时间片对应的排重文件信息;一个排重文件调入一级内存存储以后,系统对于这个排重文件内的每条排重信息根据主叫号码建立键树;所述基于BCD码和RLC算法的压缩方法RLC针对无损压缩的算法,它用重复字节和重复的次数来简单描述来代替重复的字节;所述基于命中统计的LRU算法,不同级存储之间进行换进换出的单位是一个时间段的排重信息,在一级存储里面进行命中统计,实时统计每个时间段排重信息访问的次数,根据访问次数大小决定哪个时间片排重信息被调出;在二级存储里面,根据从一级存储调到二级存储的时间决定哪个时间片排重信息被调到磁盘上。
2.根据权利要求1所述的基于内存的海量话单数据交叉排重方法,其特征是当系统需要换进换出的时候使用LRU算法,确定哪个时间段的排重信息需要换出。
3.根据权利要求1所述的基于内存的海量话单数据交叉排重方法,其特征是采用分布式并行处理机制,利用现有主机多CPU的优势,进行多进程并行处理技术。通过专有的根据大容量数据特点进行设计的数据处理引擎和核心中间件技术,采用并行处理方式,使得多个排重进程协同并行操作。
4.根据权利要求1所述的基于内存的海量话单数据交叉排重方法,其特征是二级存储调入一级工作集窗口内存,通过简单的压缩和解压缩的处理,一方面适当降低内存空间的占有,另一方面处理效率优于从磁盘调入内存的I/O操作。
5.根据权利要求1所述的基于内存的海量话单数据交叉排重方法,其特征是采用基于文件事务的回退机制当一个待排重的文件全部处理完毕,把该文件生成的排重信息进行提交,刷新到磁盘上,成功后才对该文件进行提交。
6.根据权利要求1所述的基于内存的海量话单数据交叉排重方法,其特征是灵活配置的排重规则完全排重和交叉排重规则配置,每种排重规则可以设置不同的排重字段和排重条件;或系统设置特定的产品或者商品、特定的用户不参加排重。
7.根据权利要求1所述的基于内存的海量话单数据交叉排重方法,其特征是采用基于时间片的交叉排重引入基于时间片的交叉排重信息,又称作为时主键话单,系统将跨时间片的话单按照时间片切割成多条排重信息,每条排重信息有自己对应的时间片。
8.根据权利要求7所述的基于内存的海量话单数据交叉排重方法,其特征是系统进行交叉排重时,首先求取待排重的话单涉及的时间片,然后根据AVL索引调入涉及的时间片的历史排重信息文件,根据键树查找该主叫号码在所有时间片文件内的话单,根据交叉排重规则,进行比较和判定。
全文摘要
基于内存的海量话单数据交叉排重方法,采用内存的多级存储机制、基于二叉平衡树(AVL)和键树的索引技术、基于BCD码和RLC(Run-Length Coding)算法的压缩技术和基于时间片的交叉排重方法相结合的过程所述多级存储机制采用三级存储机制第一级为内存中的工作集窗口,第二级为内存中的压缩排重信息,第三级为磁盘;在一级和二级存储之间的换入和换出只是解压缩和压缩,在二级和三级存储通过内存映射方法来实现;交叉排重时采用基于二叉平衡树(AVL)和键树的索引方法。
文档编号H04Q3/00GK1897629SQ20061008576
公开日2007年1月17日 申请日期2006年6月30日 优先权日2006年6月30日
发明者林锦歆, 黄晓颖, 薛庆童, 余志刚, 庄学阳 申请人:南京联创科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1