一种话单排重方法和装置 【技术领域】
本发明涉及通信领域中的业务支撑技术, 具体地, 涉及话单排重的方法及装置。背景技术 排重是计费系统的一个重要环节, 计费系统从网元采集话单后, 为了保证用户话 单的唯一性, 必须进行排重处理, 排除重复的话单。随着电信业务的日益复杂、 运营商的用 户数日益增多, 计费系统每日要处理海量的话单, 排重的性能尤为重要。
现有的排重技术可以分为三种 : 一种是传统的数据库排重方法, 利用数据库的主 键必须唯一的特性进行排重 ; 一种是文件排重方法, 利用文件系统的文件路径、 文件名或文 件记录必须唯一的特性进行排重 ; 一种是内存排重方法, 利用内存的排重关键字必须唯一 的特性进行排重。相比而言, 内存排重方法由于不需要进行慢速的 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 将排重索引增量文件与话单索引文件 合并 ; 判断事务控制日志的内容是否执行完毕, 若不完毕, 则重新执行事务控制日志的内 容。
本实施例的话单排重装置, 将排重索引内存进行分堆处理, 在话单排重的同时, 将 内存索引堆中的新话单索引文件中的新增的话单索引部分 ( 即排重索引增量文件 ) 定期 通过临时目录移动到目标目录, 并生成事务控制日志, 在话单排重装置正常运转时, 如果内存索引堆的空间在超过空间阈值, 将排重索引内存中的新话单索引文件保存到磁盘中, 替 换原话单索引文件, 提高了话单排重的工作效率 ; 如果话单排重装置发生故障, 则将排重索 引增量文件与磁盘中的原话单索引文件合并, 保证了话单排重的有效性和准确性 ; 由于事 务控制日志的存在, 即使在排重索引增量文件输出的过程中, 话单排重装置出现故障, 也会 在装置初始化时根据事务控制日志的内容重新执行, 保证了排重索引增量文件输出的可靠 性。
最后应说明的是 : 以上所述仅为本发明的优选实施例而已, 并不用于限制本发明, 尽管参照前述实施例对本发明进行了详细的说明, 对于本领域的技术人员来说, 其依然可 以对前述各实施例所记载的技术方案进行修改, 或者对其中部分技术特征进行等同替换。 凡在本发明的精神和原则之内, 所作的任何修改、 等同替换、 改进等, 均应包含在本发明的 保护范围之内。