业务推送量的统计系统及方法
技术领域
本发明涉及互联网技术领域,尤其涉及一种业务推送量的统计系统及方法。
背景技术
在网络平台的一些产品推广活动中,推广方会针对满足一定条件的用户,进行业务推送,如,下发一些奖励或通知等。而该类活动一般都会对发放的奖励总额或通知总量进行限额(即,额度限制),所以需要对业务推送量进行实时的统计。
现有技术中,一般在业务推送端,利用数据库或者本地缓存对业务推送量进行统计。每推送一条业务,向数据库或本地缓存发送一次推送量,数据库或者本地缓存进行累加,以计算推送总量。
发明人在实现本发明的过程中,发现现有技术至少存在如下问题:采用数据库方式进行统计,当推送量太大时,数据库无法同时对大量推送请求进行响应,因此具有并发性能问题;而采用本地缓存方式进行统计,则存在机器重启后数据丢失的缺陷。
发明内容
本发明实施例提供一种业务推送量的统计系统及方法,以解决数据库的并发性能问题,以及避免机器重启造成的数据丢失问题,实现实时、有效的业务推送量统计。
为达到上述目的,本发明实施例提供了一种业务推送量的统计系统,所述系统为具有多个缓存节点的分布式缓存系统,每个所述缓存节点中设置有累加器,每个所述缓存节点分别对应多个用户ID,且每个所述用户ID唯一对应一个所述缓存节点,所述业务推送量的统计系统,还包括:获取模块,用于获取业务推送指令,所述业务推送指令包含本条业务推送的业务推送量和目标用户ID;发送模块,用于将所述业务推送指令发送至与所述目标用户ID唯一对应的所述缓存节点,使得所述缓存节点中的所述累加器对本条业务推送的业务推送量进行累加;第一同步模块,用于将所述累加器中累加后的计数值更新至所述缓存节点;第二同步模块,用于将所述累加后的计数值更新至数据库。
本发明实施例还提供了一种业务推送量的统计方法,所述方法基于具有多个缓存节点的分布式缓存系统,每个所述缓存节点中设置有累加器,每个所述缓存节点分别对应多个用户ID,且每个所述用户ID唯一对应一个所述缓存节点,所述业务推送量的统计方法,包括:获取业务推送指令,所述业务推送指令包含本条业务推送的业务推送量和目标用户ID;将所述业务推送指令发送至与所述目标用户ID唯一对应的所述缓存节点,使得所述缓存节点中的所述累加器对本条业务推送的业务推送量进行累加;将所述累加器中累加后的计数值更新至所述缓存节点;将所述累加后的计数值更新至数据库。
本发明实施例提供的业务推送量的统计系统及方法,通过采用分布式缓存技术,对大量的业务推送进行并行处理,解决了数据库的并发性能问题,同时采用分布式缓存与数据库存储相配合的方式,克服了本地缓存数据容易丢失的缺陷,实现了高速、准确的业务推送量统计。
附图说明
图1为本发明提供的业务推送量的统计系统一个实施例的系统框图;
图2为本发明提供的业务推送量的统计系统另一个实施例的系统框图;
图3为本发明提供的业务推送量的统计系统一个具体实施例的系统框图;
图4为本发明提供的业务推送量的统计方法一个实施例的方法流程图;
图5为本发明提供的业务推送量的统计方法另一个实施例的方法流程图。
附图标记说明:
A-分布式缓存、a-缓存节点、B-数据库、C-业务推送端、110-获取模块、120-发送模块、130-第一同步模块、140-第二同步模块、150-预处理模块、160-预设模块。
具体实施方式
下面结合附图对本发明实施例业务推送量的统计系统及方法进行详细描述。
实施例一
图1为本发明提供的业务推送量的统计系统一个实施例的系统框图。如图1所示,该系统为具有多个缓存节点a的分布式缓存系统,每个缓存节点a中设置有累加器,每个缓存节点a分别对应多个用户标识(Identity;以下简称:ID),且每个用户ID唯一对应一个缓存节点a,该业务推送量的统计系统还包括:获取模块110、发送模块120、第一同步130和第二同步模块140。
其中,获取模块110用于获取业务推送指令,该业务推送指令包含本条业务推送的业务推送量和目标用户ID;发送模块120用于将该业务推送指令发送至与目标用户ID唯一对应的缓存节点a,使得该缓存节点a中的累加器对本条业务推送的业务推送量进行累加;第一同步模块130用于将累加器中累加后的计数值更新至缓存节点a;第二同步模块140用于将累加后的计数值更新至数据库B。
在本发明实施例中,当服务器(业务推送端)向某个目标用户ID发出一条业务推送指令时,获取模块110获取到该业务推送指令。如果该条指令是为了推送奖励,则指令中包含的业务推送量为推送的奖励额度;如果该条指令是为了推送通知,则指令中包含的业务推送量为推送的通知数,一般为1条。然后发送模块120将该业务推送指令发送至与目标用户ID唯一对应的缓存节点a。该缓存节点a中的累加器将当前计数值与该条指令中的业务推送量进行累加。第一同步模块130将累加后的计数值更新至缓存节点a,第二同步模块140将该累加后的计数值更新至数据库B中。
本发明实施例提供的业务推送量的统计系统,通过采用分布式缓存技术,对大量的业务推送进行并行处理,解决了数据库的并发性能问题,同时采用分布式缓存与数据库存储相配合的方式,克服了本地缓存数据容易丢失的缺陷,实现了高速、准确的业务推送量统计。
实施例二
图2为本发明提供的业务推送量的统计系统另一个实施例的系统框图。如图2所示,在上述实施例的基础上,本发明实施例提供的业务推送量的统计系统还可以包括:预处理模块150。该预处理模块150用于根据散列算法,将用户ID与缓存节点a相对应。
散列(Hash)算法是将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值。例如,系统中缓存节点的总个数为k,取用户ID中的固定两位关键字被k除后所得的余数,可以作为对应各个缓存节点的索引值。采用散列算法可以将用户ID均匀得分配给各个缓存节点,实现高效的运算。
此外,本发明实施例提供的业务推送量的统计系统还可以包括:预设模块160。该预设模块160用于为每个缓存节点a设置限额值,该限额值为缓存节点a将统计的业务推送量的总值。
假设业务推送方欲将业务推送总量控制在N以内,则每个缓存节点的限额值可以为M=N/k,以解决数据库的单点并发性能问题。此时,当缓存节点在接收到业务推送指令时,读取当前计数值,并且在当前计数值小于上述限额值M的情况下,累加器对当前计数值和业务推送量进行累加,然后将业务推送指令发送至目标用户ID;若当前计数值大于或等于M,则不再进行推送操作。缓存节点在读取当前计数值时,首先读取存储于本缓存节点中的当前计数值,若读取失败,则读取存储于数据库中的当前计数值(进行数据库恢复),以保证缓存数据丢失时系统的正常运行。
在本发明实施例中,第一同步模块130可以采用同步更新的方式,将累加后的计数值更新至缓存节点a。而第二同步模块140可以采用异步更新的方式,将累加后的计数值更新至数据库B。图3为本发明提供的业务推送量的统计系统一个具体实施例的系统框图,如图3所示,业务推送端C中,n台服务器可以同时向多个用户ID发送不同类型的业务推送指令,分布式缓存A接收到各条业务推送指令后,根据规则分配给不同的缓存节点,由累加器进行累加。当出现多个线程访问同一个资源的情况时,需要确保该资源在某一特定时刻只能被一个线程所访问,因此,第一同步模块130同步更新缓存节点,以保证系统运算的正确性。在分布式缓存A更新后,第二同步模块140可以异步更新数据库B,将数据存储到数据库B的记录(item)中,从而缩短了运算时间,提高了系统效率。
本发明实施例提供的业务推送量的统计系统,通过采用分布式缓存技术,对大量的业务推送进行并行处理,解决了数据库的并发性能问题,同时采用分布式缓存与数据库存储相配合的方式,克服了本地缓存数据容易丢失的缺陷,实现了高速、准确的业务推送量统计。
实施例三
图4为本发明提供的业务推送量的统计方法一个实施例的方法流程图,该方法基于具有多个缓存节点的分布式缓存系统,每个缓存节点中设置有累加器,每个缓存节点分别对应多个用户ID,且每个用户ID唯一对应一个缓存节点。该方法的执行主体可以为上述业务推送量的统计系统,也可以为集成在该系统上到装置或芯片。如图4所示,该业务推送量的统计方法包括如下步骤:
S401,获取业务推送指令,该业务推送指令包含本条业务推送的业务推送量和目标用户ID。
在本发明实施例中,当服务器(业务推送端)向某个目标用户ID发出一条业务推送指令时,系统获取到该业务推送指令。如果该条指令是为了推送奖励,则指令中包含的业务推送量为推送的奖励额度;如果该条指令是为了推送通知,则指令中包含的业务推送量为推送的通知数,一般为1条。
S402,将业务推送指令发送至与目标用户ID唯一对应的缓存节点,使得该缓存节点中的累加器对本条业务推送的业务推送量进行累加。
系统将该业务推送指令发送至与目标用户ID唯一对应的缓存节点。该缓存节点中的累加器将当前计数值与该条指令中的业务推送量进行累加。
S403,将累加器中累加后的计数值更新至该缓存节点。
S404,将累加后的计数值更新至数据库。
最后,系统将累加后的计数值更新至缓存节点和数据库。
本发明实施例提供的业务推送量的统计方法,通过采用分布式缓存技术,对大量的业务推送进行并行处理,解决了数据库的并发性能问题,同时采用分布式缓存与数据库存储相配合的方式,克服了本地缓存数据容易丢失的缺陷,实现了高速、准确的业务推送量统计。
实施例四
图5为本发明提供的业务推送量的统计方法另一个实施例的方法流程图。如图5所示,在上述图4所示实施例的基础上,本实施例提供的业务推送量的统计方法可以进一步包括以下步骤:
S501,根据散列算法,将用户ID与缓存节点相对应。
散列算法是将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值。例如,系统中缓存节点的总个数为k,取用户ID中的固定两位关键字被k除后所得的余数,可以作为对应各个缓存节点的索引值。采用散列算法可以将用户ID均匀得分配给各个缓存节点,实现高效的运算。
S502,为每个缓存节点设置限额值,该限额值为缓存节点将统计的业务推送量的总值。
假设业务推送方欲将业务推送总量控制在N以内,则每个缓存节点的限额值可以为M=N/k,以解决数据库的单点并发性能问题。
S503,获取业务推送指令。
S504,将业务推送指令发送至与目标用户ID唯一对应的缓存节点。
系统获取来此业务推送端的业务推送指令后,将其发送至相应的缓存节点。
S505,读取存储于本缓存节点中的当前计数值。
缓存节点在接收到业务推送指令时,首选读取存储于本缓存节点中的当前计数值。
S506,判断是否读取成功,如果成功,则执行步骤S508,否则,执行步骤S507。
S507,读取存储于数据库中的当前计数值,然后执行步骤S508。
若读取失败,则读取存储于数据库中的当前计数值(进行数据库恢复),以保证缓存数据丢失时系统的正常运行。
S508,判断当前计数值是否小于限额值M,如果是,则执行步骤S509,否则,停止推送、结束流程。
S509,将业务推送指令发送至目标用户ID。
S510,将累加后的计数值同步更新至缓存节点。
S511,将累加后的计数值异步更新至数据库。
业务推送端中可能存在多台服务器同时向多个用户ID发送不同类型的业务推送指令,分布式缓存接收到各条业务推送指令后,根据规则分配给不同的缓存节点,由累加器进行累加。当出现多个线程访问同一个资源的情况时,需要确保该资源在某一特定时刻只能被一个线程所访问,因此,系统需要同步更新缓存节点,以保证系统运算的正确性。在分布式缓存更新后,系统可以异步更新数据库,将数据存储到数据库的记录中,从而缩短了运算时间,提高了系统效率。
本发明实施例提供的业务推送量的统计方法,通过采用分布式缓存技术,对大量的业务推送进行并行处理,解决了数据库的并发性能问题,同时采用分布式缓存与数据库存储相配合的方式,克服了本地缓存数据容易丢失的缺陷,实现了高速、准确的业务推送量统计。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。