CN102065192B - 一种话单排重方法和装置 - Google Patents
一种话单排重方法和装置 Download PDFInfo
- Publication number
- CN102065192B CN102065192B CN2009102237294A CN200910223729A CN102065192B CN 102065192 B CN102065192 B CN 102065192B CN 2009102237294 A CN2009102237294 A CN 2009102237294A CN 200910223729 A CN200910223729 A CN 200910223729A CN 102065192 B CN102065192 B CN 102065192B
- Authority
- CN
- China
- Prior art keywords
- index
- file
- scheduling
- ticket
- internal memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种话单排重方法及装置,其中,该方法包括:将排重索引内存划分为对应磁盘的多个内存索引堆,每个内存索引堆与对应磁盘中的话单索引文件对应;根据接收的话单文件及内存索引堆中对应的话单索引文件,对话单文件进行排重,生成新的话单索引文件;将内存索引堆中的新话单索引文件保存到对应的磁盘。本发明的话单排重方法和装置,将排重索引内存区进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应,在话单排重过程中,根据话单文件中的堆关键字查找对应的内存索引堆,提高了工作效率。
Description
技术领域
本发明涉及通信领域中的业务支撑技术,具体地,涉及话单排重的方法及装置。
背景技术
排重是计费系统的一个重要环节,计费系统从网元采集话单后,为了保证用户话单的唯一性,必须进行排重处理,排除重复的话单。随着电信业务的日益复杂、运营商的用户数日益增多,计费系统每日要处理海量的话单,排重的性能尤为重要。
现有的排重技术可以分为三种:一种是传统的数据库排重方法,利用数据库的主键必须唯一的特性进行排重;一种是文件排重方法,利用文件系统的文件路径、文件名或文件记录必须唯一的特性进行排重;一种是内存排重方法,利用内存的排重关键字必须唯一的特性进行排重。相比而言,内存排重方法由于不需要进行慢速的IO和外部数据库系统的访问,具备快速数据传输的特点,因此效率较高。
现有的内存排重原理是:(1)将某一时间段的排重索引文件装入内存,将装入的当前话单记录和载入内存的排重索引进行比较;(2)如果排重关键字没有找到对应的时间段,则需要装载进此时间段的排重索引文件进入内存,再进行比较;(3)对应的时间段装入内存后,若在内存中命中排重关键字,表明当前的话单记录是重复的话单记录,直接写入重单文件,若没有命中,则说明是新的排重索引,更新内存;(4)将内存中的排重索引更新到磁盘中。
申请号为200810183273.9、公开日为2009年5月27日的中国发明专利申请公开了一种话单剔重方法和装置,该方法和装置在话单的内存排重过程中进行应用,综合了哈希表、平衡二叉树和MD5的技术,提高了话单内存排重的效率,节约了存储空间。但在另一方面,在话单排重时,如果在内存的排重索引中找不到对应的话单排重关键字,则需要在内存中增加新的排重索引,如果不及时将内存中的新排重索引提交到磁盘中,那么在程序异常、宕机、掉电时,新排重索引就可能丢失,而申请号为200810183273.9、公开日为2009年5月27日的中国发明专利申请并没有提出上述如何将内存的排重索引快速的保存到磁盘中的技术解决方案。
在实现本发明过程中,发明人发现现有技术中的将内存的排重索引快速的保存到磁盘中至少存在如下问题:
(1)以话单为单位输出更新后的索引增量文件,会导致索引增量文件过多,将会产生大量的小而碎的文件,同时需要大量文件的打开、关闭操作,文件太碎降低了磁盘的访问效率;
(2)因为需要大量的IO读写操作,直接对索引增量文件进行合并,消耗的时间较长;
(3)对话单文件中的话单进行排重必须等待索引增量文件合并完毕后或排重索引保存到磁盘完毕后才可以进行下去,排重效率不高;
(4)由于运营商的话单种类众多,每种话单的数量级和时间跨度特征都不相同,例如国际漫游语音/短信话单数量较少,但时间跨度很大,有可能收到1个月前的话单;这样按照某一时间段加载的内存就会由于要参与的排重数据较多导致排重效率下降的问题。例如,某日国际漫游的语音话单有10条,而当日的国内语音话单有100万条,那么需要在1000010条话单中查找接收到的国际漫游的语音话单是否存在重单,不但消耗内存,而且查找效率低下,内存中的排重索引保存到磁盘中的时间也会明显加长。
发明内容
本发明的目的是针对现有技术中话单排重过程中话单索引文件保存到磁盘中存在的效率低下的缺陷,提出一种话单排重的方法及装置,以提高话单排重的整体效率。
为实现上述目的,根据本发明的一个方面,提供了一种话单排重的方法。
根据本发明实施例的话单排重的方法,包括:将排重索引内存划分为对应磁盘的多个内存索引堆,每个内存索引堆与对应磁盘中的话单索引文件对应;根据接收的话单文件及内存索引堆中对应的话单索引文件,对话单文件进行排重,生成新的话单索引文件;将内存索引堆中的新话单索引文件保存到对应的磁盘。
在上述技术方案中,话单排重方法还可以包括:在生成新的话单索引文件时,还生成排重索引增量文件;在系统出现故障无法将内存索引堆中的新话单索引文件保存到对应的磁盘时,将排重索引增量文件与对应的磁盘中的话单索引文件合并,生成新的话单索引文件。
在上述技术方案中,在生成排重索引增量文件后还可以包括:将内存索引堆中的排重索引增量文件保存到临时目录下,生成事务控制日志,事务控制日志中记录有排重索引增量文件的临时目录和目标目录;将排重索引增量文件由临时目录移动到目标目录,删除事务控制日志。
在上述技术方案中,话单排重方法还可以包括:如果在将排重索引增量文件保存到临时目录、再由临时目录移动到目标目录的步骤中系统出现故障,在系统初始化时,再次执行将排重索引增量文件保存到临时目录、再由临时目录移动到目标目录的步骤。
在上述技术方案中,话单排重方法还可以包括:按照时间和业务类型将排重索引内存划分为对应磁盘的多个内存索引堆。
在上述技术方案中,根据接收的话单文件及内存索引堆中对应的话单索引文件对话单文件进行排重的步骤可以包括:从排重索引内存中查找对应的内存索引堆,当未查找到对应的内存索引堆时,从对应磁盘中的话单索引文件中加载;在对应的内存索引堆中查找话单对应的排重关键字,对每条话单进行排重。
在上述技术方案中,对每条话单进行排重的步骤具体可以包括:在对应的内存索引堆中查找话单对应的排重关键字,如果找到,该条话单为重单,否则先对内存索引堆加锁,在该内存索引堆中增加该排重关键字,形成新的话单索引文件,设置内存索引堆的修改标识,然后对该内存索引堆解锁,并生成排重输出文件;排重输出文件包括:正常输出话单文件、重单输出文件、排重索引增量文件。
在上述技术方案中,将内存索引堆中的新话单索引文件保存到对应的磁盘的步骤具体可以包括:在设置有修改标识的内存索引堆中判断内存索引堆的空间是否超过空间阈值;如果超过,将该内存索引堆中的新话单索引文件保存到磁盘中;空间阈值包括:设置修改标识的内存索引堆的个数达到一定数量,排重索引内存的空间大小超过一定阈值,或者内存索引堆的个数达到一定数量。
本发明的话单排重方法,根据时间和业务类型将排重索引内存区进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应,在话单排重过程中,根据话单文件中的堆关键字查找对应的内存索引堆,提高了查找效率,将新的话单索引文件保存到磁盘中,减少了对磁盘中话单索引文件的IO读取次数,提高了工作效率。
为实现上述目的,根据本发明的另一个方面,提供了一种话单排重装置。
根据本发明实施例的话单排重装置,包括:排重索引内存,用于存储对应磁盘的多个以堆存放的话单索引文件,每个内存索引堆与对应磁盘中的话单索引文件对应;排重处理单元,用于根据接收的话单文件及内存索引堆中对应的话单索引文件,对话单文件进行排重,生成新的话单索引文件;索引保存单元,用于将内存索引堆中的新话单索引文件保存到对应的磁盘。
在上述技术方案中,排重处理单元可以包括:排重模块,用于根据读取的话单的业务类型查找对应的内存索引堆,根据话单的排重关键字进行话单排重,将话单文件中的排重关键字加入到内存索引堆中,形成新的话单索引文件;事务控制模块,用于生成排重输出文件和事务控制日志,调用排重模块,将排重输出文件由临时目录移动到目标目录;合并模块,用于读取排重索引增量文件中的堆关键字和话单关键字,查找对应的话单索引文件是否存在,根据查找结果,追加话单关键字;排重输出文件包括:正常输出话单文件、重单输出文件、排重索引增量文件。
在上述技术方案中,排重模块可以包括:获取子模块,用于获取话单文件中每条话单的堆关键字和排重关键字;索引堆查找子模块,用于根据堆关键字查找对应的内存索引堆,如果没有找到,则从磁盘的话单索引文件中加载;关键字查找子模块,用于在内存索引堆中查找话单文件中的排重关键字,如果找到,则判断该条话单为重单,否则通知加解锁子模块;加解锁子模块,用于对内存索引堆加锁、解锁;新索引生成子模块,用于在未找到话单文件中的排重关键字的内存索引堆中增加排重关键字,形成新的话单索引文件,设置内存索引堆的修改标识,并生成排重输出文件。
在上述技术方案中,事务控制模块可以包括:输出保存子模块,用于将正常输出话单文件、重单输出文件、排重索引增量文件保存到临时目录下;日志生成子模块,用于生成事务控制日志,事务控制日志中记录有输入文件、正常输出话单文件、重单输出文件和排重索引增量文件的临时目录和目标目录;输出移动子模块,用于将输入文件、正常输出话单文件、重单输出文件和排重索引增量文件由临时目录移动到目标目录;日志删除子模块,用于删除事务控制日志。
在上述技术方案中,合并模块可以包括:读取子模块,用于读取排重索引增量文件中的堆关键字和话单关键字;索引文件查找子模块,用于根据堆关键字查找对应的话单索引文件是否存在;追加子模块,用于如果话单索引文件存在,则追加话单关键字,否则,则建立话单索引文件,并追加话单关键字。
在上述技术方案中,索引保存单元可以包括:堆识别模块,用于在设置有修改标识的内存索引堆中判断内存索引堆的空间是否超过空间阈值;任务分配模块,用于根据堆识别模块的识别结果,将操作任务分配给磁盘保存模块和内存清空模块;磁盘保存模块,用于对内存索引堆上锁,以写方式打开临时物理索引文件,将该内存索引堆中的新话单索引文件写入临时物理索引文件,再将临时物理索引文件移动到磁盘中;内存清空模块,用于磁盘保存模块将临时物理索引文件移动完毕后,清空内存索引堆,释放内存索引堆的锁;空间阈值包括:设置修改标识的内存索引堆的个数达到一定数量,排重索引内存的空间大小超过一定阈值,或者内存索引堆的个数达到一定数量。
在上述技术方案中,话单排重装置还可以包括:事务控制模块,还用于在初始化时,判断在索引增量文件目录下是否有排重索引增量文件,如果有,则调用合并模块将排重索引增量文件与话单索引文件合并;判断事务控制日志的内容是否执行完毕,若不完毕,则重新执行事务控制日志的内容。
本发明的话单排重装置,根据时间和业务类型将排重索引内存区进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应,在话单排重过程中,根据话单文件中的堆关键字查找对应的内存索引堆,提高了查找效率,克服了现有的话单内存排重装置在话单索引内存保存到磁盘的工作过程中存在的效率低下(如文件太碎、保存时间较长、影响排重过程、内存话单索引文件加载过多)的缺陷,既保证了内存排重的安全性,又降低了内存话单索引文件加载的数量,减少了读取磁盘IO的次数,提高了工作效率。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明话单排重方法实施例一的流程图;
图2为根据本发明话单排重方法实施例二的流程图;
图3为根据图2实施例在步骤S210与S212之间的方法流程图;
图4为根据本发明话单排重方法实施例三的流程图;
图5为根据本发明话单排重方法实施例四的流程图;
图6为根据本发明话单排重装置实施例一的结构示意图;
图7为根据本发明话单排重装置实施例二的结构示意图;
图8为根据本发明话单排重装置实施例三的结构示意图;
图9为图8实施例中的合并模块的结构示意图;
图10为图8实施例中的事物控制模块的结构示意图;
图11为图8实施例中的排重模块的结构示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
方法实施例
根据本发明实施例,提供了一种话单排重方法,图1为根据本发明话单排重方法实施例一的流程图,如图1所示,本实施例包括:
步骤S102:将排重索引内存进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应;
在电信运营商的话单排重的技术中,由于运营商的业务种类繁多,各类业务的话单数据、时间跨度不同,例如国际漫游语音话单每日的数量较少,且时间跨度较大,而国内语音话单每日数量较多,时间跨度较小,而且各类业务话单之间不会存在重复话单的现象。
因此,在本发明的实施例中,将存储话单索引文件的排重索引内存按照时间和业务类型进行分堆处理,每个内存索引堆与磁盘中存储的话单索引文件进行一一对应,每个内存索引堆具有两个属性:堆关键字和堆修改标识。
其中,堆关键字可以取精确到的时间单位、业务类型,例如,语音业务分两个堆,一个是国际漫游语音话单,精确到的时间单位为天、业务类型为A1,一个是国内语音话单,精确到的时间单位为分钟,业务类型为A2,短信业务分两个堆,一个是国际短信话单,精确到的时间单位为天,业务类型为B1,一个是国内短信话单,精确到的时间单位为分钟,业务类型为B2。
其中,在对话单文件的查重过程中,如果内存索引堆中增加新话单,则形成新的话单索引文件,并在该内存索引堆中设置修改标识,修改标识用于在内存索引堆中判断内存索引堆的空间是否超过空间阈值,以判断将该内存索引堆中的新话单索引文件是否保存到磁盘中,具体参见图2实施例中的步骤S212至S214和步骤S436至S442;
步骤S104:读取话单文件,对话单文件进行排重,生成新的话单索引文件;
步骤S106:将内存索引堆中的新话单索引文件保存到磁盘中。
本实施例的话单排重方法,根据时间和业务类型将排重索引内存区进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应,在话单排重过程中,根据话单文件中的堆关键字查找对应的内存索引堆,提高了查找效率,将新的话单索引文件保存到磁盘中,减少了对磁盘中话单索引文件的IO读取次数,提高了工作效率。
图2为根据本发明话单排重方法实施例二的流程图,如图2所示,本实施例包括:
步骤S202:将排重索引内存进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应;
步骤S204:每读取一个话单文件,先获取话单文件中每条话单的堆关键字和排重关键字;
步骤S206:根据堆关键字在排重索引内存中查找对应的内存索引堆,如果没有找到对应的内存索引堆,则从磁盘的话单索引文件中加载;
步骤S208:在内存索引堆中查找排重关键字;
具体地,在步骤S206中的查找排重关键字的过程中,可以采用背景技术中提到的申请号为200810183273.9、公开日为2009年5月27日的中国发明专利申请中提到的排重方法进行查重;
步骤S210:如果找到,证明该条话单为重单,否则先对内存索引堆加锁,在该内存索引堆中增加排重关键字,形成新的话单索引文件,设置内存索引堆的修改标识,然后对该内存索引堆解锁,并生成排重输出文件;
排重输出文件包括:正常输出话单文件、重单输出文件、排重索引增量文件;
如图3所示,在步骤S210之后还具体包括:
步骤S2102:将正常输出话单文件、重单输出文件、排重索引增量文件保存到临时目录下;
步骤S2104:生成事务控制日志,记录输入文件、正常输出话单文件、重单输出文件和排重索引增量文件的临时目录和目标目录;
步骤S2106:将输入文件、正常输出话单文件、重单输出文件和排重索引增量文件由临时目录移动到目标目录;
步骤S2108:删除事务控制日志;
步骤S212:在设置有修改标识的内存索引堆中判断内存索引堆的空间是否超过空间阈值;
空间阈值包括:设置修改标识的内存索引堆的个数达到一定数量,排重索引内存的空间大小超过一定阈值,或者内存索引堆的个数达到一定数量;
步骤S214:如果超过,将该内存索引堆中的新话单索引文件保存到磁盘中。
本实施例的话单排重方法,将排重索引内存进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应,在加载磁盘中的话单索引文件时,只需将与该内存索引堆对应的话单索引文件加载即可,减少了话单索引文件的加载数量,提高了话单的排重效率;同时,本实施例的话单排重方法,将排重输出文件先保存在临时目录下,生成事务控制日志,再将排重输出文件由临时目录移动到目标目录,如果在上述过程中话单排重装置发生故障(如程序异常、宕机、掉电)无法工作,由于事务控制日志的存在,在装置重新启动时,会根据事物控制日志的内容,将排重输出文件重新由临时目录移动到目标目录,保证了排重输出文件输出的完整性和可靠性。
图4为根据本发明话单排重方法实施例三的流程图,如图4所示,本实施例包括:
步骤S302:在话单排重装置初始化时,首先判断在索引增量文件目录下是否有排重索引增量文件;
步骤S304:如果有,则将排重索引增量文件与话单索引文件合并,合并步骤具体包括步骤S306至S312;
步骤S306:读取排重索引增量文件中的堆关键字和话单关键字;
步骤S308:根据步骤S306中的堆关键字查找对应的话单索引文件是否存在;
步骤S310:对应的话单索引文件如果存在,则追加步骤S306中的话单关键字,否则,则建立话单索引文件,并追加步骤S306中的话单关键字;
步骤S312:删除排重索引增量文件;
步骤S314:判断事务控制日志的内容是否执行完毕;
步骤S316:若事务控制日志的内容没有执行完毕,则重新执行图3中步骤S2102至步骤S2108的内容。
本实施例的话单排重方法,在方法实施例一、实施例二的基础上,在话单排重装置初始化时,判断如果在索引增量文件目录下有排重索引增量文件,则证明上一将内存索引堆中的新话单索引文件保存到磁盘的步骤未完整完成,磁盘中的话单索引文件为未更新的原文件,此时将排重索引增量文件与磁盘内的话单索引文件合并,即通过内存索引堆中的新话单索引文件中的新增的话单索引部分与磁盘内的原话单索引文件合并,保证了磁盘中的话单索引文件为最新的话单索引文件,保证了话单排重的准确性和有效性。
图5为根据本发明话单排重方法实施例四的流程图,如图5所示,本实施例包括:
步骤S402:在话单排重装置初始化时,首先判断在索引增量文件目录下是否有排重索引增量文件;
步骤S404:如果有,则将排重索引增量文件与话单索引文件合并,合并过程具体包括步骤S406至步骤S412;
步骤S406:读取排重索引增量文件中的堆关键字和话单关键字;
步骤S408:根据步骤S406中的堆关键字查找对应的话单索引文件是否存在;
步骤S410:对应的话单索引文件如果存在,则追加步骤S406中的话单关键字,否则,则建立话单索引文件,并追加步骤S406中的话单关键字;
步骤S412:删除排重索引增量文件;
步骤S414:判断事务控制日志的内容是否执行完毕;
步骤S416:若事务控制日志的内容没有执行完毕,则重新执行步骤S428至步骤S434中的内容;
步骤S418:将排重索引内存进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应;
步骤S420:每读取一个话单文件,先获取话单文件中每条话单的堆关键字和排重关键字;
步骤S422:根据堆关键字在对应的内存索引堆中查找对应的内存索引堆,如果没有找到对应的内存索引堆,则从磁盘的话单索引文件中加载;
步骤S424:在内存索引堆中查找排重关键字;
步骤S426:如果找到,证明该条话单为重单,否则先对内存索引堆加锁,在该内存索引堆中增加排重关键字,形成新的话单索引文件,设置内存索引堆的修改标识,然后对该内存索引堆解锁,并生成排重输出文件;
排重输出文件包括:正常输出话单文件、重单输出文件、排重索引增量文件;
步骤S428:将正常输出话单文件、重单输出文件、排重索引增量文件保存到临时目录下;
步骤S430:生成事务控制日志,记录输入文件、正常输出话单文件、重单输出文件和排重索引增量文件的临时目录和目标目录;
步骤S432:将输入文件、正常输出话单文件、重单输出文件和排重索引增量文件由临时目录移动到目标目录;
步骤S434:删除事务控制日志;
步骤S436:在设置有修改标识的内存索引堆中判断内存索引堆的空间是否超过空间阈值;
步骤S438:如果超过,对内存索引堆上锁,以写方式打开临时物理索引文件;
步骤S440:将该内存索引堆中的新话单索引文件写入临时物理索引文件;
步骤S442:将临时物理索引文件移动到磁盘中,替换原话单索引文件;
步骤S444:移动完毕后,清空内存索引堆,保障内存索引堆占用的空间不会过大;
步骤S446:释放内存索引堆的锁,并删除排重索引增量文件。
需要说明的是,在上述步骤S436至S446中,如果话单排重装置出现故障无法将内存索引堆中的新话单索引文件保存到对应的磁盘时,将不会进行步骤S446中删除排重索引增量文件的步骤,在话单排重装置初始化时,判断出在索引增量文件目录下有排重索引增量文件,将排重索引增量文件与话单索引文件合并,即执行S402至S412的步骤;
需要说明的是,在上述步骤S428至S432中,如果话单排重装置出现故障无法将输入文件、正常输出话单文件、重单输出文件和排重索引增量文件由临时目录移动到目标目录时,在话单排重装置初始化时,步骤S414至S416将判断事务控制日志的内容没有执行完毕,则重新执行步骤S428至步骤S434中的内容。
需要说明的是,步骤S436至S446中的内存索引堆中的新话单索引文件保存到对应的磁盘的步骤与步骤S420至S426中的话单排重的步骤可以并行工作,互不干扰。
本实施例的话单排重方法,将排重索引内存进行分堆处理,在话单排重的同时,将内存索引堆中的新话单索引文件中的新增的话单索引部分(即排重索引增量文件)定期通过临时目录移动到目标目录,并生成事务控制日志,在话单排重装置正常运转时,如果内存索引堆的空间超过空间阈值,将排重索引内存中的新话单索引文件保存到磁盘中,替换原话单索引文件,提高了话单排重的工作效率;如果话单排重装置发生故障,则将排重索引增量文件与磁盘中的原话单索引文件合并,保证了话单排重的有效性和准确性;由于事务控制日志的存在,即使在排重索引增量文件输出的过程中,话单排重装置出现故障,也会在话单排重装置初始化时根据事务控制日志的内容重新执行,保证了排重索引增量文件输出的可靠性。
装置实施例
根据本发明实施例,提供了一种话单排重装置。图6为根据本发明话单排重装置实施例一的结构示意图,如图6所示,本实施例包括:
排重索引内存51,用于存储对应磁盘的多个以堆存放的话单索引文件,每个内存索引堆与对应磁盘中的话单索引文件对应;
排重处理单元52,用于根据接收的话单文件及内存索引堆中对应的话单索引文件,对话单文件进行排重,生成新的话单索引文件;
索引保存单元53,用于将内存索引堆中的新话单索引文件保存到对应的磁盘。
在本发明的实施例中,将存储话单索引文件的排重索引内存按照时间和业务类型进行分堆处理,每个内存索引堆与磁盘中存储的话单索引文件进行一一对应,每个内存索引堆具有两个属性:堆关键字和堆修改标识。
其中,堆关键字可以取精确到的时间单位、业务类型。
其中,在对话单文件的查重过程中,如果内存索引堆中增加新话单,则形成新的话单索引文件,并在该内存索引堆中设置修改标识。
本实施例的话单排重装置,根据时间和业务类型将排重索引内存区进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应,在话单排重过程中,根据话单文件中的堆关键字查找对应的内存索引堆,提高了查找效率,克服了现有的话单内存排重装置在话单索引内存保存到磁盘的工作过程中存在的效率低下(如文件太碎、保存时间较长、影响排重过程、内存话单索引文件加载过多)的缺陷,既保证了内存排重的安全性,又降低了内存话单索引文件加载的数量,减少了读取磁盘IO的次数,提高了工作效率。
图7为根据本发明话单排重装置实施例二的结构示意图,如图7所示,本实施例包括排重索引内存61、排重处理单元62和索引保存单元63,其功能与图6实施例中的对应单元功能一致,在此不再赘述。
排重处理单元62包括:
合并模块621,用于读取排重索引增量文件中的堆关键字和话单关键字,查找对应的话单索引文件是否存在,根据查找结果,追加话单关键字;
事务控制模块622,用于生成排重输出文件和事务控制日志,调用排重模块623,将排重输出文件由临时目录移动到目标目录;
排重模块623,用于根据读取的话单的业务类型查找对应的内存索引堆,根据话单的排重关键字进行话单排重,将话单文件中查找到的排重关键字加入到内存索引堆中,形成新的话单索引文件;
排重输出文件包括:正常输出话单文件、重单输出文件、排重索引增量文件。
索引保存单元63包括:
堆识别模块631,用于在设置有修改标识的内存索引堆中判断内存索引堆的空间是否超过空间阈值,将超过空间阈值的内存索引堆的堆关键字列表和操作类型传递给任务分配模块632;
其中,空间阈值包括:设置修改标识的内存索引堆的个数达到一定数量,排重索引内存的空间大小超过一定阈值,或者内存索引堆的个数达到一定数量;
任务分配模块632,用于根据堆识别模块631的识别结果,将操作任务分配给磁盘保存模块633和内存清空模块634,并在磁盘保存模块633和内存清空模块634完成相应的操作任务后接收返回的任务操作结果,其操作任务的分配方法包括顺序分配、随机分配、按函数分配;并在所有的操作任务完成后,通知增量删除模块635删除对应的排重索引增量文件;
磁盘保存模块633,用于对内存索引堆上锁,以写方式打开临时物理索引文件,将该内存索引堆中的新话单索引文件写入临时物理索引文件,再将临时物理索引文件移动到磁盘中;
其中,由于磁盘保存模块633将内存索引堆上锁,因此,在磁盘保存模块633将内存索引堆中的新话单索引文件移动到磁盘的过程可以与排重模块623的排重过程并行,提高了排重效率;
内存清空模块634,用于磁盘保存模块633将临时物理索引文件移动完毕后,清空内存索引堆,释放内存索引堆的锁;
增量删除模块635,用于删除排重索引增量文件。
本实施例的话单排重装置,将排重索引内存进行分堆处理,每个内存索引堆与磁盘中的话单索引文件一一对应,在加载磁盘中的话单索引文件时,只需将与该内存索引堆对应的话单索引文件加载即可,减少了话单索引文件的加载数量,提高了话单的排重效率;同时,本实施例的话单排重装置,将排重输出文件先保存在临时目录下,生成事务控制日志,再将排重输出文件由临时目录移动到目标目录,如果在上述过程中话单排重装置发生故障无法工作,由于事务控制日志的存在,在话单排重装置重新启动时,会根据事物控制日志的内容,将排重输出文件重新由临时目录移动到目标目录,保证了排重输出文件输出的完整性和可靠性。
图8为根据本发明话单排重装置实施例三的结构示意图,如图8所示,本实施例包括:排重索引内存71、排重处理单元72和索引保存单元73,其中,排重处理单元72包括合并模块721、事务控制模块722、排重模块723,索引保存单元73包括堆识别模块731、任务分配模块732、磁盘保存模块733、内存清空模块734、增量删除模块735,其功能分别与图6、图7实施例的对应单元、模块一致,在此不再赘述。
如图9所示,合并模块721包括:
读取子模块7211,用于读取排重索引增量文件中的堆关键字和话单关键字;
索引文件查找子模块7212,用于根据堆关键字查找对应的话单索引文件是否存在;
追加子模块7213,用于如果话单索引文件存在,则追加话单关键字,否则,则建立话单索引文件,并追加话单关键字;
增量删除子模块7214,用于删除排重索引增量文件。
如图10所示,事务控制模块722包括:
输出保存子模块7221,用于将正常输出话单文件、重单输出文件、排重索引增量文件保存到临时目录下;
日志生成子模块7222,用于生成事务控制日志,事务控制日志中记录有输入文件、正常输出话单文件、重单输出文件和排重索引增量文件的临时目录和目标目录;
输出移动子模块7223,用于将输入文件、正常输出话单文件、重单输出文件和排重索引增量文件由临时目录移动到目标目录;
日志删除子模块7224,用于删除事务控制日志。
如图11所示,排重模块723包括:
获取子模块7231,用于获取话单文件中每条话单的堆关键字和排重关键字;
索引堆查找子模块7232,用于根据堆关键字查找对应的内存索引堆,如果没有找到,则从磁盘的话单索引文件中加载;
关键字查找子模块7233,用于在所述内存索引堆中查找话单文件中的排重关键字,如果找到,则判断该条话单为重单,否则通知加解锁子模块7234;
加解锁子模块7234,用于对内存索引堆的加锁、解锁;
新索引生成子模块7235,用于在未找到话单文件中的排重关键字的内存索引堆中增加排重关键字,形成新的话单索引文件,设置内存索引堆的修改标识,并生成排重输出文件。
优选地,事务控制模块722,还用于在初始化时,判断在索引增量文件目录下是否有排重索引增量文件,如果有,则调用合并模块721将排重索引增量文件与话单索引文件合并;判断事务控制日志的内容是否执行完毕,若不完毕,则重新执行事务控制日志的内容。
本实施例的话单排重装置,将排重索引内存进行分堆处理,在话单排重的同时,将内存索引堆中的新话单索引文件中的新增的话单索引部分(即排重索引增量文件)定期通过临时目录移动到目标目录,并生成事务控制日志,在话单排重装置正常运转时,如果内存索引堆的空间在超过空间阈值,将排重索引内存中的新话单索引文件保存到磁盘中,替换原话单索引文件,提高了话单排重的工作效率;如果话单排重装置发生故障,则将排重索引增量文件与磁盘中的原话单索引文件合并,保证了话单排重的有效性和准确性;由于事务控制日志的存在,即使在排重索引增量文件输出的过程中,话单排重装置出现故障,也会在装置初始化时根据事务控制日志的内容重新执行,保证了排重索引增量文件输出的可靠性。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种话单排重方法,其特征在于,包括:
将排重索引内存划分为对应磁盘的多个内存索引堆,每个所述内存索引堆与对应磁盘中的话单索引文件对应;
根据接收的话单文件及所述内存索引堆中对应的话单索引文件,对所述话单文件进行排重,生成新的话单索引文件;
将所述内存索引堆中的新话单索引文件保存到对应的磁盘;
按照时间和业务类型将排重索引内存划分为对应磁盘的多个内存索引堆;
所述根据接收的话单文件及所述内存索引堆中对应的话单索引文件对所述话单文件进行排重的步骤包括:
获取话单文件中每条话单的堆关键字和排重关键字;
根据所述堆关键字从所述排重索引内存中查找对应的内存索引堆,当未查找到对应的内存索引堆时,从对应磁盘中的话单索引文件中加载;
在所述对应的内存索引堆中查找所述话单对应的排重关键字,对每条话单进行排重;
还包括:
在生成新的话单索引文件时,还生成排重索引增量文件;
在系统出现故障无法将内存索引堆中的新话单索引文件保存到对应的磁盘时,将所述排重索引增量文件与对应的磁盘中的话单索引文件合并,生成新的话单索引文件。
2.根据权利要求1所述的方法,其特征在于,在生成所述排重索引增量文件后还包括:
将内存索引堆中的排重索引增量文件保存到临时目录下,生成事务控制日志,所述事务控制日志中记录有所述排重索引增量文件的临时目录和目标目录;
将排重索引增量文件由临时目录移动到目标目录,删除事务控制日志。
3.根据权利要求2所述的方法,其特征在于,还包括:
如果在所述将排重索引增量文件保存到临时目录、再由临时目录移动到目标目录的步骤中系统出现故障,在系统初始化时,再次执行所述将排重索引增量文件保存到临时目录、再由临时目录移动到目标目录的步骤。
4.根据权利要求1所述的方法,其特征在于,所述对每条话单进行排重的步骤具体包括:
在对应的内存索引堆中查找所述话单对应的排重关键字,如果找到,该条话单为重单,否则先对内存索引堆加锁,在该内存索引堆中增加该排重关键字,形成新的话单索引文件,设置内存索引堆的修改标识,然后对该内存索引堆解锁,并生成排重输出文件;
所述排重输出文件包括:正常输出话单文件、重单输出文件、排重索引增量文件。
5.根据权利要求4所述的方法,其特征在于,所述将内存索引堆中的新话单索引文件保存到对应的磁盘的步骤具体包括:
在设置有修改标识的内存索引堆中判断内存索引堆的空间是否超过空间阈值;
如果超过,将该内存索引堆中的新话单索引文件保存到磁盘中;
所述空间阈值包括:设置修改标识的内存索引堆的个数达到一定数量,排重索引内存的空间大小超过一定阈值,或者内存索引堆的个数达到一定数量。
6.一种话单排重装置,其特征在于,包括:
排重索引内存,用于存储对应磁盘的多个以堆存放的话单索引文件,每个内存索引堆与对应磁盘中的话单索引文件对应;
排重处理单元,用于根据接收的话单文件及内存索引堆中对应的话单索引文件,对所述话单文件进行排重,生成新的话单索引文件;
索引保存单元,用于将内存索引堆中的新话单索引文件保存到对应的磁盘;
按照时间和业务类型将排重索引内存划分为对应磁盘的多个内存索引堆;
所述排重处理单元,具体用于获取话单文件中每条话单的堆关键字和排重关键字,根据所述堆关键字从所述排重索引内存中查找对应的内存索引堆,当未查找到对应的内存索引堆时,从对应磁盘中的话单索引文件中加载,在所述对应的内存索引堆中查找所述话单对应的排重关键字,对每条话单进行排重;所述排重处理单元包括:
排重模块,用于根据读取的话单的业务类型查找对应的内存索引堆,根据话单的排重关键字进行话单排重,将所述话单文件中的排重关键字加入到所述内存索引堆中,形成新的话单索引文件;
事务控制模块,用于生成排重输出文件和事务控制日志,调用所述排重模块,将所述排重输出文件由临时目录移动到目标目录;
合并模块,用于读取排重索引增量文件中的堆关键字和话单关键字,查找对应的话单索引文件是否存在,根据查找结果,追加话单关键字;
所述排重输出文件包括:正常输出话单文件、重单输出文件、排重索引增量文件。
7.根据权利要求6所述的装置,其特征在于,所述排重模块包括:
获取子模块,用于获取话单文件中每条话单的堆关键字和排重关键字;
索引堆查找子模块,用于根据所述堆关键字查找对应的内存索引堆,如果没有找到,则从磁盘的话单索引文件中加载;
关键字查找子模块,用于在所述内存索引堆中查找话单文件中的所述排重关键字,如果找到,则判断该条话单为重单,否则通知加解锁子模块;
加解锁子模块,用于对内存索引堆加锁、解锁;
新索引生成子模块,用于在未找到话单文件中的所述排重关键字的内存索引堆中增加排重关键字,形成新的话单索引文件,设置内存索引堆的修改标识,并生成排重输出文件。
8.根据权利要求6所述的装置,其特征在于,所述事务控制模块包括:
输出保存子模块,用于将正常输出话单文件、重单输出文件、排重索引增量文件保存到临时目录下;
日志生成子模块,用于生成事务控制日志,所述事务控制日志中记录有输入文件、正常输出话单文件、重单输出文件和排重索引增量文件的临时目录和目标目录;
输出移动子模块,用于将输入文件、正常输出话单文件、重单输出文件和排重索引增量文件由临时目录移动到目标目录;
日志删除子模块,用于删除事务控制日志。
9.根据权利要求6所述的装置,其特征在于,所述合并模块包括:
读取子模块,用于读取排重索引增量文件中的堆关键字和话单关键字;
索引文件查找子模块,用于根据所述堆关键字查找对应的话单索引文件是否存在;
追加子模块,用于如果话单索引文件存在,则追加所述话单关键字,否则,则建立话单索引文件,并追加话单关键字。
10.根据权利要求6所述的装置,其特征在于,所述索引保存单元包括:
堆识别模块,用于在设置有修改标识的内存索引堆中判断内存索引堆的空间是否超过空间阈值;
任务分配模块,用于根据所述堆识别模块的识别结果,将操作任务分配给磁盘保存模块和内存清空模块;
磁盘保存模块,用于对内存索引堆上锁,以写方式打开临时物理索引文件,将该内存索引堆中的新话单索引文件写入所述临时物理索引文件,再将所述临时物理索引文件移动到磁盘中;
内存清空模块,用于所述磁盘保存模块将所述临时物理索引文件移动完毕后,清空所述内存索引堆,释放内存索引堆的锁;
所述空间阈值包括:设置修改标识的内存索引堆的个数达到一定数量,排重索引内存的空间大小超过一定阈值,或者内存索引堆的个数达到一定数量。
11.根据权利要求6-9中任意一项所述的装置,其特征在于,还包括:
所述事务控制模块,还用于在初始化时,判断在索引增量文件目录下是否有排重索引增量文件,如果有,则调用所述合并模块将所述排重索引增量文件与话单索引文件合并;判断事务控制日志的内容是否执行完毕,若不完毕,则重新执行事务控制日志的内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102237294A CN102065192B (zh) | 2009-11-18 | 2009-11-18 | 一种话单排重方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102237294A CN102065192B (zh) | 2009-11-18 | 2009-11-18 | 一种话单排重方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102065192A CN102065192A (zh) | 2011-05-18 |
CN102065192B true CN102065192B (zh) | 2013-12-04 |
Family
ID=44000286
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102237294A Active CN102065192B (zh) | 2009-11-18 | 2009-11-18 | 一种话单排重方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102065192B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105989022B (zh) * | 2015-01-30 | 2019-09-13 | 北京陌陌信息技术有限公司 | 数据排重方法及系统 |
CN109976896B (zh) * | 2019-04-09 | 2021-06-29 | 中国联合网络通信集团有限公司 | 业务排重处理方法和装置 |
CN113411761B (zh) * | 2020-03-17 | 2022-12-27 | 中国移动通信集团浙江有限公司 | 话单计费方法及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7200623B2 (en) * | 1998-11-24 | 2007-04-03 | Oracle International Corp. | Methods to perform disk writes in a distributed shared disk system needing consistency across failures |
JP2001101044A (ja) * | 1999-09-29 | 2001-04-13 | Toshiba Corp | トランザクショナルファイル管理方法、トランザクショナルファイルシステム及び複合トランザクショナルファイルシステム |
US20070027936A1 (en) * | 2005-07-28 | 2007-02-01 | Stakutis Christopher J | Determining changes made to a source file to transmit to a target location providing a mirror copy of the source file |
CN100544372C (zh) * | 2007-06-14 | 2009-09-23 | 中兴通讯股份有限公司 | 一种电话号码映射域名服务器的内存处理方法及装置 |
CN101350869B (zh) * | 2007-07-19 | 2011-08-24 | 中国电信股份有限公司 | 基于索引和散列的电信计费去重方法及设备 |
CN101442731B (zh) * | 2008-12-12 | 2010-07-14 | 中国移动通信集团安徽有限公司 | 一种话单剔重方法和装置 |
-
2009
- 2009-11-18 CN CN2009102237294A patent/CN102065192B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN102065192A (zh) | 2011-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9262458B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US7765215B2 (en) | System and method for providing a trustworthy inverted index to enable searching of records | |
CN105718455A (zh) | 一种数据查询方法及装置 | |
CN103384256A (zh) | 一种云存储方法及装置 | |
CN104133822A (zh) | 一种对存储器上的文件进行扫描的方法及装置 | |
CN103425435B (zh) | 磁盘存储方法及磁盘存储系统 | |
CN105447166A (zh) | 一种基于关键字查找信息的方法及系统 | |
CN101404027A (zh) | 一种文件管理方法、系统及设备 | |
CN101226546B (zh) | 文件的检索方法 | |
CN102065192B (zh) | 一种话单排重方法和装置 | |
CN101763433B (zh) | 一种数据存储系统及方法 | |
CN110069215A (zh) | 一种基于块存储的动态调整存储单元的方法及装置 | |
CN102799583B (zh) | 一种面向对象的存取方法及系统 | |
US20090217022A1 (en) | Method and apparatus for loading classes and re-organizing class archives | |
CN103713926A (zh) | 一种预更新软件客户端的方法及系统 | |
CN100437480C (zh) | 音频文件的读取方法和读取装置 | |
CN112765112A (zh) | 一种安装包打包和解包方法 | |
CN102902687A (zh) | 资源文件的访问方法及装置 | |
EP3343395B1 (en) | Data storage method and apparatus for mobile terminal | |
Li et al. | A new dynamic hash index for flash-based storage | |
KR101249739B1 (ko) | 달빅 가상머신이 탑재된 단말기에서 자바 클래스 로딩 방법, 그리고 이를 수행하는 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 | |
CN103823761B (zh) | 一种提升终端黑名单容量和检索速度的方法 | |
US20220083522A1 (en) | Data processing method, apparatus, electronic device, and computer storage medium | |
CN101826097B (zh) | 一种节省通信录数据库存储空间的方法、系统 | |
CN113536047A (zh) | 一种图数据库数据删除方法、系统、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |