一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于哈希算法的消息排重方法、装置、设备和存储介质与流程

2023-02-19 05:40:35 来源:中国专利 TAG:


1.本发明涉及移动通信领域,具体涉及一种基于哈希算法的消息排重方法、装置、计算设备和计算机存储介质。


背景技术:

2.随着电信行业移动通信技术的发展,当前普遍采用话单来记录原始通信记录信息。计费系统通过对话单进行编解码、业务分析、批价、分发入库等一系列处理,计算出用户的通信费用。通话、短信以及网络数据等相关业务均会产生话单,因此,针对大量话单,话单采集点在一些特殊情况下(如系统进程异常导致的重复采集、网元本身硬件或软件异常产生的重单等),会不可避免地产生重复的话单。如果不将重复的话单及时剔除,将导致计费系统对用户的费用统计有误,后续的详单查询也将出现错误。因此,当出现多条重复话单或者交叉话单时,计费系统必须按照一定的规则将多余的话单过滤掉,来保证费用计算的准确性。
3.而现有技术中,基于记录一段时间内话单中的具有唯一标识作用的关键字段值(如主叫号码、被叫号码、通话起始时间、通话时长等),常用的两种方法均是在处理新话单时,将新话单的关键字字段与已记录的话单进行匹配以完成排重。第一种方法是将完整的唯一组合键(多个关键字段值拼接得到,如会话id、用户号码、消息序号等)保存至数据库或文件中进行排重,使得其占用的存储空间很大,且保存至文件中则会受限于磁盘io,使得排重性能无法满足计费系统实时计费的性能要求,保存至数据库中则容灾切换无法达到秒级切换;第二种方法是将唯一组合键映射为md5值,利用bloom filter算法将唯一组合键压缩成位信息保存至内存中。此方法较第一种方法减少了存储需求,同时提升了性能。但第二种方法存在一定的错误率,使排重较为困难,且由于需要存储至内存中,使得话单数量过大,消息量超过内存块大小,会出现误判重复消息的问题。可见现有技术无法兼顾排重的高性能、存储空间占用小、动态扩容以及排重准确性。


技术实现要素:

4.鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于哈希算法的消息排重方法和相应的基于哈希算法的消息排重装置,计算设备以及计算机存储介质。
5.根据本发明的一个方面,提供了一种基于哈希算法的消息排重方法,所述方法包括:
6.接收客户端发送的哈希值以及从计费消息中提取的消息序号;所述哈希值是根据客户端从计费消息中提取到的会话id和用户号码计算得到的;
7.根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重。
8.上述方案中,所述根据所述消息序号以及哈希值从内存数据库中查找对应的内存
数据库记录,依据查找结果对所述计费消息进行排重进一步包括:
9.根据所述消息序号,计算内存数据库记录对应的分记录号以及在内存数据库记录中的位信息序号;
10.根据所述哈希值和所述分记录号,在所述内存数据库中查找是否存在对应的内存数据库记录;
11.若未查找到对应的内存数据库记录,则判定所述计费消息为新消息,并根据所述哈希值、所述分记录号以及所述位信息序号在所述内存数据库中添加新的内存数据库记录。
12.上述方案中,所述内存数据库记录包括:哈希值部分、消息存储部分以及分记录号部分;
13.所述根据所述哈希值、所述分记录号以及所述位信息序号在所述内存数据库中添加新的内存数据库记录进一步包括:
14.将新的内存数据库记录的哈希值部分的值设置为所述哈希值,将新的内存数据库记录的分记录号部分的值设置为所述分记录号,并将新的内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值设置为第一数值。
15.上述方案中,所述根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重进一步包括:
16.若查找到对应的内存数据库记录,则判断所述内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值是否为第一数值;
17.若与所述位信息序号对应的数据位的值为第一数值,则判定所述计费消息为重复消息;若与所述位信息序号对应的数据位的值为第二数值,则判定所述计费消息为新消息,并将与所述位信息序号对应的数据位的值设置为第一数值。
18.上述方案中,在所述根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重之后,所述方法还包括:
19.将排重结果返回至客户端。
20.根据本发明的另一方面,提供了一种基于哈希算法的消息排重装置,包括:接收模块和排重判断模块;其中,
21.所述接收模块,用于接收客户端发送的哈希值以及从计费消息中提取的消息序号;所述哈希值是根据客户端从计费消息中提取到的会话id和用户号码计算得到的;
22.所述排重判断模块,用于根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重。
23.上述方案中,所述排重判断模块进一步用于:根据所述消息序号,计算内存数据库记录对应的分记录号以及在内存数据库记录中的位信息序号;根据所述哈希值和所述分记录号,在所述内存数据库中查找是否存在对应的内存数据库记录;若未查找到对应的内存数据库记录,则判定所述计费消息为新消息。
24.上述方案中,所述排重判断模块进一步用于:
25.若查找到对应的内存数据库记录,则判断所述内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值是否为第一数值;
26.若与所述位信息序号对应的数据位的值为第一数值,则判定所述计费消息为重复
消息;若与所述位信息序号对应的数据位的值为第二数值,则判定所述计费消息为新消息,并将与所述位信息序号对应的数据位的值设置为第一数值。
27.根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
28.所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上述的基于哈希算法的消息排重方法对应的操作。
29.根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述的基于哈希算法的消息排重方法对应的操作。
30.根据本发明提供的技术方案,接收客户端发送的哈希值以及从计费消息中提取的消息序号;所述哈希值是根据客户端从计费消息中提取到的会话id和用户号码计算得到的;根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重。由此解决了现有技术中,由于完整保存唯一组合键导致的存储空间占用过大、排重性能差、容灾切换慢,以及由于映射为md5值再压缩成为信息进行保存导致的错误率提升、排重困难且无法动态扩容等问题;本发明提供的技术方案有效地兼顾了排重的高性能、存储空间占用小、动态扩容以及排重准确性,极大地提高了信息排重的的效率以及准确性,并降低了排重所需的成本。
31.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
32.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
33.图1示出了根据本发明一个实施例的基于哈希算法的消息排重方法的流程示意图;
34.图2示出了根据本发明一个实施例的内存数据库记录格式示意图;
35.图3示出了根据本发明另一个实施例的基于哈希算法的消息排重方法的流程示意图;
36.图4示出了根据本发明一个实施例的基于哈希算法的消息排重装置的结构框图;
37.图5示出了根据本发明实施例的一种计算设备的结构示意图。
具体实施方式
38.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
39.图1示出了根据本发明一个实施例的基于哈希算法的消息排重方法的流程示意
图,如图1所示,该方法包括如下步骤:
40.步骤s101,接收客户端发送的哈希值以及从计费消息中提取的消息序号;所述哈希值是根据客户端从计费消息中提取到的会话id和用户号码计算得到的。
41.具体的,客户端从计费消息中提取会话id、用户号码和消息序号,根据所述会话id和用户号码经过哈希函数算法计算出对应的哈希值,该哈希值能够用于标识唯一的会话。
42.步骤s102,根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重。
43.具体的,所述根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重进一步包括:
44.根据所述消息序号,计算内存数据库记录对应的分记录号以及在内存数据库记录中的位信息序号;
45.根据所述哈希值和所述分记录号,在所述内存数据库中查找是否存在对应的内存数据库记录;
46.若未查找到对应的内存数据库记录,则判定所述计费消息为新消息,并根据所述哈希值、所述分记录号以及所述位信息序号在所述内存数据库中添加新的内存数据库记录。
47.根据本实施例提供的基于哈希算法的消息排重方法,接收客户端发送的哈希值以及从计费消息中提取的消息序号;所述哈希值是根据客户端从计费消息中提取到的会话id和用户号码计算得到的;根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重。利用本发明提供的技术方案,能够基于计费消息得出哈希值以及消息序号,并将消息序号映射成内存数据库记录中的位信息,通过查找内存数据库中是否存有对应的内存数据库记录,从而对计费消息进行排重。大幅节省了内存中的存储空间,同时保证了排重的性能以及准确性,极大地提高了排重的效率。
48.图2示出了根据本发明一个实施例的内存数据库记录格式示意图,如图2所示,其中:
49.客户端根据会话id、用户号码经过哈希函数算法计算出哈希值,该哈希值可称为会话id对应的哈希值,根据长度分配会话id对应的哈希值占用16bytes,保存在内存数据库记录的会话id字段,用于标识唯一的会话。
50.考虑到位信息的大小,若为其分配的内存空间过小,那内存数据库实际记录数会过多,造成存储的浪费;若为位信息分配的内存空间过大,则一条记录产生的binlog(二进制日志,用于记录当前记录的数据更改状态)则过大。因此,优选的,内存数据库分配24bytes内存用来保存用于排重的位信息。
51.记录的24bytes内存中的每一个比特位用来标识一条计费消息,用0和1来标志计费消息是否存在的状态,所以一条内存数据库记录可以保存24*8=192条消息。当需要保存超过192条的消息时,每隔192条消息,增加一个分记录号,再新增一条记录进行保存。
52.图2中,分记录号为1的记录用于保存消息序号为1-192的计费消息,图2中记录了当前会话已经存储了消息序号为1和2的两条计费消息。分记录号为2的记录用于保存消息序号为193-384的消息,图2中记录了当前会话已经存储了消息序号为193和194两条消息。
53.图3示出了根据本发明一个实施例的基于哈希算法的消息排重方法的流程示意
图,如图3所示,该方法包括如下步骤:
54.步骤s301:根据消息序号,计算分记录号以及位信息序号。
55.具体的,根据所述消息序号,计算内存数据库记录对应的分记录号以及在内存数据库记录中的位信息序号。
56.优选的,通过消息序号n,计算出分记录号码m和24bytes中需要设置的位信息序号k:
57.m=n/192 1
58.k=n%192
59.其中,m为n除以192的商加1;k为n除以192取余数。
60.步骤s302:根据哈希值和分记录号,判断在内存数据库中是否存有对应的内存数据库记录。
61.具体的,若未查到对应的内存数据库记录,则判定所述计费消息为新消息,执行步骤s303,判定所述计费消息为新消息,并在内存数据库中插入一条新纪录。
62.若查到了与所述内存数据库相关的记录,则执行所述步骤304判断所述内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值是否为第一数值;
63.优选的,所述第一数值为1。
64.步骤s303:判定所述计费消息为新消息,并在内存数据库中插入一条新纪录。
65.具体的,在步骤s302中若未查找到对应的内存数据库记录,则判定所述计费消息为新消息,并根据所述哈希值、所述分记录号以及所述位信息序号在所述内存数据库中添加新的内存数据库记录;
66.其中,所述内存数据库记录包括:哈希值部分、消息存储部分以及分记录号部分。
67.将新的内存数据库记录的哈希值部分的值设置为所述哈希值,将新的内存数据库记录的分记录号部分的值设置为所述分记录号,并将新的内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值设置为第一数值。
68.优选的,将新的内存数据库记录的分记录号部分的值设置为所述分记录号m;将新的内存数据库记录的消息存储部分中24bytes中第k位设置为1。
69.步骤s304:判断所述内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值是否为第一数值。
70.具体的,在步骤s302中若查找到对应的内存数据库记录,则判断所述内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值是否为第一数值;若是,则执行步骤s305,判定所述计费消息为重复消息;若否,则执行步骤s306,判定所述计费消息为新消息,并将与所述位信息序号对应的数据位的值设置为第一数值。
71.优选的,根据当前消息序号n,计算出当前消息的位信息序号k=n%192;根据位信息序号k,判断当前内存数据库记录的24bytes中对应的第k位的值是否为1。若是,则执行步骤s305,判定所述计费信息为重复消息;若否,则执行步骤s306,判定所述计费消息为新消息,并将与所述位信息序号对应的数据位的值设置为第一数值。
72.步骤s305:判定所述计费消息为重复消息。
73.具体的,若与所述位信息序号对应的数据位的值为第一数值,则判定所述计费消息为重复消息。
74.优选的,若内存数据库记录的24bytes中对应的第k位的值为1,则判定所述计费消息为重复消息。
75.步骤s306:判定所述计费消息为新消息,并将与所述位信息序号对应的数据位的值设置为第一数值。
76.具体的,若与所述位信息序号对应的数据位的值为第二数值,则判定所述计费消息为新消息,并将与所述位信息序号对应的数据位的值设置为第一数值。
77.优选的,所述第二数值为0;若内存数据库记录的24bytes中对应的第k位的值为0,则判定所述计费消息为新消息。
78.进一步的,将内存数据库记录的24bytes中对应的第k位设置为1。
79.步骤s307:将排重结果返回至客户端。
80.具体的,在步骤s303、步骤s305、步骤s306之后,执行步骤s307,将排重结果返回至客户端。
81.图4示出了根据本发明一个实施例的基于哈希算法的消息排重装置的结构框图,如图4所示,该装置包括:接收模块401、排重判断模块402以及存储模块403;其中,
82.所述接收模块401,用于接收客户端发送的哈希值以及从计费消息中提取的消息序号;所述哈希值是根据客户端从计费消息中提取到的会话id和用户号码计算得到的。
83.所述排重判断模块402,用于根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重。
84.具体的,所述排重判断模块402进一步用于:根据所述消息序号,计算内存数据库记录对应的分记录号以及在内存数据库记录中的位信息序号;根据所述哈希值和所述分记录号,在所述内存数据库中查找是否存在对应的内存数据库记录;若未查找到对应的内存数据库记录,则判定所述计费消息为新消息。
85.若查找到对应的内存数据库记录,则判断所述内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值是否为第一数值;
86.若与所述位信息序号对应的数据位的值为第一数值,则判定所述计费消息为重复消息;若与所述位信息序号对应的数据位的值为第二数值,则判定所述计费消息为新消息,并将与所述位信息序号对应的数据位的值设置为第一数值。
87.所述存储模块403,用于若未查找到对应的内存数据库记录,则根据所述哈希值、所述分记录号以及所述位信息序号在所述内存数据库中添加新的内存数据库记录。
88.可选地,存储模块403进一步用于:将新的内存数据库记录的哈希值部分的值设置为所述哈希值,将新的内存数据库记录的分记录号部分的值设置为所述分记录号,并将新的内存数据库记录的消息存储部分中与所述位信息序号对应的数据位的值设置为第一数值。
89.根据本实施例提供的基于哈希算法的消息排重装置,接收客户端发送的哈希值以及从计费消息中提取的消息序号;所述哈希值是根据客户端从计费消息中提取到的会话id和用户号码计算得到的;根据所述消息序号以及哈希值从内存数据库中查找对应的内存数据库记录,依据查找结果对所述计费消息进行排重。利用本发明提供的技术方案,能够基于计费消息得出哈希值以及消息序号,并将消息序号映射成内存数据库记录中的位信息,通过查找内存数据库中是否存有对应的内存数据库记录,从而对计费消息进行排重。大幅节
省了内存中的存储空间,同时保证了排重的性能以及准确性,极大地提高了排重的效率。
90.本发明还提供了一种非易失性计算机存储介质,计算机存储介质存储有至少一可执行指令,可执行指令可执行上述任意方法实施例中的基于哈希算法的消息排重方法。
91.图5示出了根据本发明实施例的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
92.如图5所示,该计算设备可以包括:处理器(processor)502、通信接口(communications interface)504、存储器(memory)506、以及通信总线508。
93.其中:
94.处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。
95.通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。
96.处理器502,用于执行程序510,具体可以执行上述基于哈希算法的消息排重方法实施例中的相关步骤。
97.具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
98.处理器502可能是中央处理器cpu,或者是特定集成电路asic(application specific integrated circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。
99.存储器506,用于存放程序510。存储器506可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
100.程序510具体可以用于使得处理器502执行上述任意方法实施例中的基于哈希算法的消息排重方法。程序510中各步骤的具体实现可以参见上述基于哈希算法的消息排重方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
101.在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
102.在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
103.类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
104.本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
105.此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
106.本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
107.应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献