一种话单剔重方法

文档序号:6358202阅读:221来源:国知局
专利名称:一种话单剔重方法
技术领域
本发明涉及一种相同话单记录的剔重方式,特别是在电信系统内部解决海量级文件的文件级排重的方法。
背景技术
随着电信运营商业务开展的广泛性,各种新业务层出不穷,各种业务话单层出不穷;随着电信资费的下降,客户群的增长,用户的通话量也逐年递增,用户的详单日数量级往往突破亿。对海量数据的剔重已经成为运行商必须解决的问题。目前,各大运营商大都采用数据库方式、内存方式和文件系统方式,这些方法在海量数据处理进或多或少在性能和IO 方面有缺陷。数据库方式利用数据库唯一索引技术进行剔重的具体方法是,在详细话单表中对字段建立唯一索引,在详细话单进行入库操作时,唯一索引机制对每一条插入的话单记录进行检查,从而保证重单不会入库。在表中的话单记录较少时,该方法的入库效率还可以。但是,当表中记录数较多时(如在每个出账周期的后几天),入库速度将严重下降以致于该方法失去了实用意义。数据的存储和检索严重的依赖于数据的性能。对后台数据的I/O 要求较高,往往采用分库、分区、数据压缩、增加硬件配置的提升来提高数据的吞吐能力。其投资成本大,系统后期维护要求高,造成维护费用的居高不下。传统文件系统方式在话单预处理过程中,每天建立一个重单检查比较文件。对每条经过预处理后生成的标准话单,取出字段(字符串),根据条件打开相应的重单检查文件, 利用HASH算法和匹配函数在重单检查文件中进行快速查找,如果匹配成功,该话单属于重单,则进行相应的重单处理。如果匹配不成功,该活单不是重单,该话单中上述三个字符率添加到对应的重单检查文件中,用于对后续话单的重单检查。为了减少HASH算法的匹配查找的时间,重单检查文件也应该越小越好。这种方法要在全文件中查找和性能和文件的大小相关,话单量不大性能还可能,量大了可能会有影响。纯内存方式将重单检查文件放在内存中运行,该方法不依赖数据库所提供的功能,处理速度快,但是重单检查文件数量较多,除了要占用一部分硬盘存储资源以外,还需要系统有较大的内存资源,在处理海量话单对主机内存有比较严格要求。

发明内容
本发明所要解决的技术问题是提供一种话单剔重方法,以减小话单剔重过程的内存占用,提高话单剔重的处理能力,使得话单剔重处理过程中性能与数据量无关。本发明解决上述技术问题的技术方案如下一种话单剔重方法,包括如下步骤 步骤1 读取当前话单信息,并获取当前话单的业务类型;
步骤2 根据获取的业务类型,选定当前话单的剔重业务组;
步骤3 根据当前话单的通话时间,在所述剔重业务组中定位到与当前话单对应的时间段;
步骤4:根据当前话单的通话时间,在步骤3定位到的时间段中继续定位到与当前话单对应的时间分区;
步骤5 将步骤4中定位到的时间分区中的已有话单写入内存,并与当前话单进行比较;若已有话单与当前话单相同,则当前话单为重单,将当前话单写入重单文件中;若已有话单与当前话单不同,则将当前话单与所述已有话单进行合并,生成新的已有话单。本发明的有益效果是根据话单信息,将换单按照剔重业务组、时间段和时间分区进行分门别类,在最小的类别(时间分区)里进行话单的剔重操作,本发明的方法不必将所有的已有话单的信息全部写入内存,仅将与当前话单相对应的时间分区内的话单信息写入内存即可,剔重过程的内存占用空间小,剔重速度快,节省系统资源,并使得话单剔重处理过程中性能与数据量无关。在上述技术方案的基础上,本发明还可以做如下改进。进一步,所述业务类型包括语音话单和短信话单,所述剔重业务组为语音话单业务组或者短信话单业务组。采用上述进一步方案的有益效果是,将话单按照语音话单和短信话单进行分门归类,避免了某一类话单在其他类话单业务组中进行剔重,免去了不必要的时间浪费,节省了剔重时间。进一步,所述时间段以小时为单位。进一步,所述时间分区以秒为单位。采用上述进一步方案的有益效果是,对每天的话单信息可以快速的定位到相关的时间段和时间分区。进一步,对所述时间段内的已有话单进行索引,生成索引文件;所述时间分区为在所述索引文件中的索引块;步骤3和步骤4中,通过所述索引文件对当前话单所对应的时间段和时间分区进行定位;所述步骤5中,将当前话单与所述已有话单进行合并的同时,在所述索引块中记录下当前话单的索引信息。采用上述进一步方案的有益效果是,利用索引文件提高了查找和剔重速度。进一步,若所述索引块中记录已满,则新开一块索引块,并在已满的索引块头信息中保存新开索引块的地址。采用上述进一步方案的有益效果是,保证了索引文件的可持续使用。


图1为本发明提供的话单剔重方法流程图2为本发明提供的一种剔重索引组织结构图; 图3为本发明中扩展索引块的示意图。
具体实施例方式以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。如图1所示,本发明的话单剔重方法包括如下步骤
4步骤1 读取当前话单信息,并获取当前话单的业务类型; 步骤2 根据获取的业务类型,选定当前话单的剔重业务组;
步骤3 根据当前话单的通话时间,在所述剔重业务组中定位到与当前话单对应的时间段;
步骤4:根据当前话单的通话时间,在步骤3定位到的时间段中继续定位到与当前话单对应的时间分区;
步骤5:将步骤4中定位到的时间分区中的已有话单写入内存,并于当前话单进行比较;若已有话单与当前话单相同,则当前话单为重单,将当前话单写入重单文件中;若已有话单与当前话单不同,则将当前话单与所述已有话单进行合并,生成新的已有话单。其中,业务类型包括了语音话单和短信话单等,相应的剔重业务组包括了语音话单业务组和短信话单业务组等;按照每天所生成的的话单量,时间段可以设置以小时为单位,其中的时间分区可以设置到以秒为单位。对于查询和剔重来说,对话单进行索引,利用索引文件可以极大的提高查询和剔重效率。因此,采用索引手段,对时间段内的已有话单进行索引,生成索引文件;所述时间分区为在所述索引文件中的索引块;步骤3和步骤4中,通过所述索引文件对当前话单所对应的时间段和时间分区进行定位;步骤5中,将当前话单与所述已有话单进行合并的同时,在所述索引块中记录下当前话单的索引信息。当建立索引文件进行查询和剔重操作时,索引文件的大小会随着数据量信息的增加而不断增加,此时难免索引块中因记录已满,导致新的记录无法写入,而新的记录恰恰是应该记录在该块索引块中的记录,因此若索引块中记录已满,则新开一块索引块(如在该索引文件的最后新开索引块),并在已满的索引块头信息中保存新开索引块的地址,使得新的记录可以加载新增的索引块中,从而保证了索引文件的可持续使用,待新的话单进行剔重操作时,通过在已满的索引块头信息中保存新开索引块的地址便可对新开的索引块中的话单记录进行查询。以下,结合具体实践,对本发明的话单剔重方法进行进一步阐述。图2是本发明中所提供的一种剔重索引组织结构图。根据配置信息程序初始化, 形成按配置生成的索引信息存储的空文件,索引文件按业务分组、索引按时间分段、索引按时间分区。一次性为所需的剔重索引预先申请好磁盘空间,减少在运行过程中申请所占用时间,为以后的话单剔重做好准备工作,加快剔重速度。此处按业务分组是指可以将不同类型的话单入在一起剔重,也可以分开剔重,任意结合。例如可以将所有语音的话单分成一个组即所有语音话单共用一类索引文件剔重, 将短信话单单独分成一组所有短信话单按一类索引文件剔重。如果觉得此种分类比较麻烦,当然也可以将语音和短信话单放在同一类索引文件中进行剔重。上述按时间分段是指将上面分完组后同一类的索引文件按配置指定的要求细分成多个索引文件。例如可以将所有语音的索引文件按小时分,这样以一天为例可以将一天语音的索引文件分成M个小的索引文件,并且每一个小的索引文件存储指定的一个小时话单的索引。上述按时间分区是指在按小时分段,即分成小的索引文件后,还可以将索引文件内部按配置分成不同的分区。例如上面所述的一天语音的索引文件分成M个小时的索引文件,即每小时生成一个小的索引文件,这时每一个小的索引文件内部又按秒来分区即一个小的索引文件被分成指定大小的3600块,每一秒占用一个索引块。剔重时,一条话单来了,从该话单中得到业务类型,这样就能确定分组定位到组。 然后取话单通话时间,这时根据年月日小时能够定位到时间分段,即能找到指定的索引文件。此时取话单通话时间的分和秒。这时能得到这条话单是这个小时的第几秒,从而定位到索引文件中从头开始的第几块索引。如果一个小时内这一秒的话单太多,原来指定的这一秒的索引块已用完,则可以在索引文件最后新开一块索引块,并在这个索引块头信息中保存新开索引块的地址,可从这块索引块直按跳到新开的索引块,如图3所示。综上,业务分组、索引文件和索引块对应的是剔重的三步定位,索引组(业务分组) 定位到索引文件目录,索引文件定位到指定的索引文件,索引块定位到这个索引文件中具体的哪块索引块。初始化的过程为
(1)读取业务配置信息文件和配置表,加载到内存中,组织索引信息;
(2)按话单关键字段生成索引组,索引文件和索引块,即分别索引文件按业务分组,索引文件按时间分段,索引文件按时间分区。初始化之后,便可以对话单进行剔重从入口文件中取一条话单记录信息并根据系统预定义的剔重索引字段和条件,查找索引组,同时定位索引文件,并在索引文件块中快速查找详单的索引信息,如果找到说明是重单,将此话单打到重单文件中,如果没找着说明此话单不是重单,将话单输出到出口同时在索引块中记录下该条话单的索引信息为下次剔重作为依据,如果详单索引在预分的索引块不够用,系统运用快速自动扩展功能,新建一块子索引块,两索引块之间关系是上下层父子关系。具体过程为
(1)读取业务配置信息文件和配置表,加载到内存中,组织索引信息;
(2)读取文件,取一条话单记录,取出索引关键字段;
(3)根据索引条件,先查找到索引组;
(4)查找到索引组后定位到索引文件;
(5)根据字段中如手机号码或时间定位到索引块,在索引运用快速匹配函数查找算法得到索引信息;
(6)如果得到索引信息说明是重单,输出到重单文件,并转到(2),否则转到(7);
(7)如果没有得到索引信息,则在索引块中记录下当前话单的索引信息,为下次剔重提供依据;
(8)如果预先分配的索引块满了,则在索引文件的最后新建一个索引块,将新的话单索引信息放在新索引块中,同时将新索引块的地址记录在原有索引块的头信息中,两者是上下层的父子关系。对于索引文件的维护定时分析某一段时间内的索引信息存储数据文件,获取各时间段内索引信息的分布状态、占用空间和索引文件扩展频率,并根据分析结果,调整索引配置方案,提升系统处理效率。本发明提供的方法采用索引文件按业务分组、索引文件按时间分段、索引文件按时间或用户分区,具有占用内存小,IO操作针对传统剔重程序小,并且大容量、高性能的处理能力,实现了处理性能与数据量无关。具体来说,一条话单进行剔重,通过条件直接定位到文件;再打开文件,通过剔重条件直接定位到指定的索引块,再定位到索引记录,计算访问的话,都是一次性的定位,只有当预先分配的索引块满了时,才会再次定位扩展索引块。 比原有在文件中遍历并做大量IO操作要好得多。当然,根据实际情况,索引文件可以进行相应调整,比如
以话单业务来做索引组,按时间来做文件名和索引块定位条件。将语音业务分一个索引组,将数据业务分一个索引组。然后按时间,配置每天0 6点为一个索引文件(此段时间内的话单少),以后7 M点每一个小时一个索引文件。每一个索引文件又分多个索引块,这时将0 6点的那个索引文件配置为每6秒占用一个索引块,7 M点的索引文件我们配置为每一秒占用一个索引块。这样,在查找剔重索引时,就可以定位到秒,只从那秒内的话单索引中快速匹配函数查找。如果在这秒内的话单过多,预先分配的索引块已满,则启动自动扩展机制,在索引文件底部新开一个索引块,同时将新索引块地址记录在原索引块头信息中,为以后索引查找时定位到新索引块时使用。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种话单剔重方法,包括如下步骤步骤1 读取当前话单信息,并获取当前话单的业务类型;步骤2 根据获取的业务类型,选定当前话单的剔重业务组;步骤3 根据当前话单的通话时间,在所述剔重业务组中定位到与当前话单对应的时间段;步骤4:根据当前话单的通话时间,在步骤3定位到的时间段中继续定位到与当前话单对应的时间分区;步骤5:将步骤4中定位到的时间分区中的已有话单写入内存,并与当前话单进行比较;若已有话单与当前话单相同,则当前话单为重单,将当前话单写入重单文件中;若已有话单与当前话单不同,则将当前话单与所述已有话单进行合并,生成新的已有话单。
2.根据权利要求1所述的话单剔重方法,其特征在于所述业务类型包括语音话单和短信话单,所述剔重业务组为语音话单业务组或者短信话单业务组。
3.根据权利要求1所述的话单剔重方法,其特征在于所述时间段以小时为单位。
4.根据权利要求1所述的话单剔重方法,其特征在于所述时间分区以秒为单位。
5.根据权利要求1所述的话单剔重方法,其特征在于对所述时间段内的已有话单进行索引,生成索引文件;所述时间分区为在所述索引文件中的索引块;步骤3和步骤4中, 通过所述索引文件对当前话单所对应的时间段和时间分区进行定位;所述步骤5中,将当前话单与所述已有话单进行合并的同时,在所述索引块中记录下当前话单的索引信息。
6.根据权利要求5所述的话单剔重方法,其特征在于若所述索引块中记录已满,则新开一块索引块,并在已满的索引块头信息中保存新开索引块的地址。
全文摘要
本发明涉及一种话单剔重方法,包括步骤1读取当前话单信息并获取当前话单的业务类型;步骤2根据业务类型,选定当前话单的剔重业务组;步骤3根据当前话单的通话时间,在剔重业务组中定位到与当前话单对应的时间段;步骤4根据当前话单的通话时间,在所述时间段中继续定位到与当前话单对应的时间分区;步骤5将所述时间分区中的已有话单写入内存,并与当前话单进行比较,若已有话单与当前话单相同,则当前话单为重单;若不同,则将当前话单与已有话单进行合并,生成新的已有话单。该方法按业务分组、按时间分段、按时间分区,占用内存小,IO操作针对传统剔重程序小,具有大容量、高性能的处理能力,实现了处理性能与数据量无关。
文档编号G06F17/30GK102169499SQ20111009662
公开日2011年8月31日 申请日期2011年4月18日 优先权日2011年4月18日
发明者卓才华 申请人:北京神州数码思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1