发明内容
本申请实施例提供了一种更新活动榜单的方法、装置及存储介质,可以用于提高活动榜单的准确性。所述技术方案如下:
第一方面,提供了一种更新活动榜单的方法,所述方法包括:
获取第一消息,所述第一消息为属于第一活动时段的活动消息,所述第一活动时段为当前活动时段的上一活动时段;
根据所述第一消息对所述第一活动时段的活动榜单进行更新;
获取第二消息,所述第二消息为属于所述当前活动时段的活动消息;
根据所述第二消息,对所述当前活动时段的全局榜单进行更新,所述全局榜单包括属于所述当前活动时段的所有消息携带的用户数据;
根据更新后的所述当前活动时段的全局榜单、更新后的所述第一活动时段的榜单,对所述当前活动时段的活动榜单进行更新。
可选地,所述第二消息携带第二用户的用户数据,所述用户数据包括用户标识和活动数据;
所述根据所述第二消息,对所述当前活动时段的全局榜单进行更新,包括:
如果所述全局榜单中存在所述第二消息携带的所述第二用户的用户标识,则根据所述第二消息携带的所述第二用户的活动数据,对所述全局榜单中的第二用户的用户标识所对应的活动数据进行更新。
可选地,所述方法还包括:
如果所述全局榜单中不存在所述第二消息携带的所述第二用户的用户标识,则在所述全局榜单中添加所述第二用户的用户数据。
可选地,所述活动榜单包括多个用户的用户数据,所述用户数据包括用户标识和活动数据;
所述根据更新后的所述当前活动时段的全局榜单、更新后的所述第一活动时段的榜单,对所述当前活动时段的活动榜单进行更新,包括:
从更新后的所述第一活动时段的活动榜单中获取对应的活动数据排在前N位的用户标识,得到N个晋级用户标识,所述N为大于0的整数;
根据更新后的所述当前活动时段的全局榜单,确定所述N个晋级用户标识对应的目标活动数据;
根据所述N个晋级用户标识和所述N个晋级用户标识对应的目标活动数据,生成所述当前活动时段的临时榜单;
将所述当前活动时段的临时榜单作为所述当前活动时段的活动榜单。
可选地,所述根据更新后的所述当前活动时段的全局榜单,确定所述N个晋级用户标识对应的目标活动数据,包括:
从更新后的所述全局榜单中查找每个晋级用户标识;
对于查找到的晋级用户标识,从更新后的所述全局榜单中获取查找到的晋级用户标识对应的活动数据,将获取的活动数据作为相应晋级用户标识对应的目标活动数据;
对于未查找到的晋级用户标识,将未查找到的晋级用户标识对应的目标活动数据设置为0。
可选地,所述第一消息携带所述第一消息的时间戳,所述第二消息携带所述第二消息的时间戳,所述时间戳用于指示相应消息的生成时间,或者,所述时间戳用于指示相应消息所对应的操作的完成时间。
可选地,所述第一消息和所述第二消息均位于消息队列中,且所述第一消息位于所述第二消息之前,所述消息队列包括多个消息,所述多个消息按照所述多个消息的接收时间先后顺序排列,或者,所述多个消息按照所述多个消息的权重大小排列。
第二方面,提供了一种更新活动榜单的装置,所述装置包括:
第一获取模块,用于获取第一消息,所述第一消息为属于第一活动时段的活动消息,所述第一活动时段为当前活动时段的上一活动时段;
第一更新模块,用于根据所述第一消息对所述第一活动时段的活动榜单进行更新;
第二获取模块,用于获取第二消息,所述第二消息为属于所述当前活动时段的活动消息;
第二更新模块,还用于根据所述第二消息,对所述当前活动时段的全局榜单进行更新,所述全局榜单包括属于所述当前活动时段的所有消息携带的用户数据;
第二更新模块,还用于根据更新后的所述当前活动时段的全局榜单、更新后的所述第一活动时段的榜单,对所述当前活动时段的活动榜单进行更新。
可选地,所述第二消息携带第二用户的用户数据,所述用户数据包括用户标识和活动数据;
所述第二更新模块具体用于:
如果所述全局榜单中存在所述第二消息携带的所述第二用户的用户标识,则根据所述第二消息携带的所述第二用户的活动数据,对所述全局榜单中的第二用户的用户标识所对应的活动数据进行更新。
可选地,所述第二更新模块具体还用于:
如果所述全局榜单中不存在所述第二消息携带的所述第二用户的用户标识,则在所述全局榜单中添加所述第二用户的用户数据。
可选地,所述活动榜单包括多个用户的用户数据,所述用户数据包括用户标识和活动数据;
所述第三更新模块具体用于:
从更新后的所述第一活动时段的活动榜单中获取对应的活动数据排在前N位的用户标识,得到N个晋级用户标识,所述N为大于0的整数;
根据更新后的所述当前活动时段的全局榜单,确定所述N个晋级用户标识对应的目标活动数据;
根据所述N个晋级用户标识和所述N个晋级用户标识对应的目标活动数据,生成所述当前活动时段的临时榜单;
将所述当前活动时段的临时榜单作为所述当前活动时段的活动榜单。
可选地,所述第三更新模块具体用于:
从更新后的所述全局榜单中查找每个晋级用户标识;
对于查找到的晋级用户标识,从更新后的所述全局榜单中获取查找到的晋级用户标识对应的活动数据,将获取的活动数据作为相应晋级用户标识对应的目标活动数据;
对于未查找到的晋级用户标识,将未查找到的晋级用户标识对应的目标活动数据设置为0。
可选地,所述第一消息携带所述第一消息的时间戳,所述第二消息携带所述第二消息的时间戳,所述时间戳用于指示相应消息的生成时间,或者,所述时间戳用于指示相应消息所对应的操作的完成时间。
可选地,所述第一消息和所述第二消息均位于消息队列中,且所述第一消息位于所述第二消息之前,所述消息队列包括多个消息,所述多个消息按照所述多个消息的接收时间先后顺序排列,或者,所述多个消息按照所述多个消息的权重大小排列。
第三方面,提供了一种更新活动榜单的装置,所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器执行所述存储器中的可执行指令来执行上述第一方面所述的任一项方法。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述第一方面所述的任一项方法的步骤。
本申请实施例提供的技术方案带来的有益效果至少包括:
在本申请实施例中,可以根据第一消息来对第一活动时段的活动榜单进行更新,之后,根据第二消息对当前活动时段的全局榜单进行更新。由于全局榜单中包含了属于当前活动时段的所有消息携带的用户数据,因此,即使第一消息延迟了,根据更新后的全局榜单和更新后的第一活动时段的榜单也依然可以得到当前活动时段的正确活动榜单,避免了由于消息延迟所导致的晋级用户错误,进而导致的当前活动时段的活动榜单错误的问题。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在对本申请实施例进行详细的解释说明之前,先对本申请实施例涉及的应用场景进行介绍。
当前,在游戏、直播、音乐等各种应用中,为了增加用户粘度,提高应用营收,可以在应用中设置各种活动。在活动中,可以根据不同活动时段内的用户数据生成相应时段内的活动榜单,进而从中选出晋级到下一活动时段的晋级用户,以此来提供用户冲榜的积极性。
例如,在游戏应用中,可以设置排位奖励活动,假设该活动可以被划分为三个活动时段,对于第一个活动时段,可以根据参加活动的所有用户在第一个活动时段内完成游戏任务的数据生成第一个活动时段的榜单。之后,从第一个活动时段的榜单中选择排在前N位的用户晋级到第二个活动时段。在第二个活动时段,可以根据晋级的N位用户在第二活动时段内完成游戏任务的数据,得到第二个活动时段的活动榜单。从第二个活动时段的活动榜单包括的N位晋级用户中继续选择M位用户,作为第三个活动时段的晋级用户,最终,根据这M位用户在第三活动时段内完成游戏任务的数据来得到该活动的最终榜单,进而对最终榜单内的用户进行奖励。
再例如,在直播应用中,可以设置主播竞赛活动。假设该活动可以被划分为三个活动时段。对于第一个活动时段,参与活动的所有主播可以按照第一个活动时段的要求进行才艺展示。观众用户可以根据各个主播的才艺展示向主播赠送礼物。统计第一个活动时段内各个主播接收到的礼物的总价值,按照礼物总价值从大到小的顺序,生成第一个活动时段的活动榜单。将第一个活动时段的活动榜单中排在前N位的主播作为晋级到第二个活动时段的主播。之后,在第二个活动时段内,这N位主播可以按照第二个活动时段的要求进行不同的才艺展示。统计第二个活动时段内这N位主播接收到的礼物总价值,进而生成的第二个活动时段的活动榜单。将第二个活动时段的活动榜单中排在前M位的主播作为晋级到第三个活动时段的主播。最终,根据第三个活动时段内这N位主播接收到的礼物总价值来得到最终的榜单,进而根据最终榜单评选出最优主播。
本申请实施例提供的更新活动榜单的方法即可以应用于诸如上述的活动过程中,用于对不同活动时段的活动榜单进行更新,以保证活动榜单的准确性。
需要说明的是,上述仅是本申请实施例给出的几种可能的应用场景的示例,但是并不构成对本申请实施例的应用场景的限定。
接下来对本申请实施例所涉及的***结构进行介绍。
图1是本申请实施例提供的一种网络***的示意图。如图1所示,该网络***包括用户设备101、第一服务器102和第二服务器103。其中,用户设备101可以与第一服务器102通信,第一服务器102可以与第二服务器103通信。
其中,用户设备101可以是指参与活动的用户所对应的设备。该用户设备101可以根据用户操作生成操作数据,进而将该操作数据发送至第一服务器102。
需要说明的是,根据应用场景的不同,用户设备101可以不同。例如,当应用场景为前述介绍的游戏应用中的排位奖励活动时,用户设备101可以为参与该排位的用户的设备,此时,用户设备101发送的操作数据即为该用户设备对应的用户的用户数据,也即,该用户设备对应的用户完成游戏任务的数据和该用户的用户标识。再例如,当应用场景为前述的直播应用中的主播竞赛活动时,用户设备101可以为所有在活动中为各个主播赠送礼物的观众用户的设备,此时,用户设备101发送的操作数据即为观众用户赠送礼物的赠送请求。
第一服务器102在接收到用户设备101发送的操作数据之后,可以根据各个用户设备101发送的操作数据生成活动消息。其中,该活动消息中包括根据操作数据确定的用户数据。
同样的,根据应用场景的不同,第一服务器102生成活动消息的方法也不同。例如,在上述游戏应用场景下,第一服务器102在接收到每个用户发送的操作数据之后,可以将各个用户发送的操作数据作为各个用户的用户数据,进而根据各个用户的用户数据,生成对应的活动消息。再例如,在上述直播应用的场景下,第一服务器102在接收到各个观众用户赠送礼物的赠送请求之后,可以根据各个观众用户赠送礼物的赠送请求来将从相应观众用户的账号中进行扣费,以完成礼物的赠送,也即完成对赠送请求的处理。在赠送请求处理完成之后,第一服务器102可以将相应赠送请求中的礼物价值作为一项活动数据,根据该活动数据来生成该赠送请求对应的活动消息,此时,该活动消息包括该活动数据和主播的标识。
可选地,第一服务器102在其他场景中,也可以通过其他方法来生成后续参与榜单生成的各个用户的活动消息。本申请实施例在此不做限定。在生成活动消息时,第一服务器102可以根据活动消息的生成时间,或者是活动消息所对应的操作的完成时间来生成相应活动消息的时间戳,将该时间戳携带在相应的活动消息中。其中,活动消息所对应的操作的完成时间可以是指活动消息中的活动数据的结算时间。例如,在上述直播应用场景中,活动消息所对应的操作的完成时间就是指活动消息所对应的赠送操作完成时结算得到的活动数据的时间。
第一服务器102在生成活动消息之后,可以将该活动消息发送至第二服务器103。第二服务器103在接收到该活动消息之后,可以按照本申请实施例提供的方法来根据活动消息对活动榜单进行更新。
需要说明的是,用户设备101可以为智能手机、笔记本、平板电脑、台式计算机等终端设备。第一服务器102和第二服务器103可以是两个独立的服务器,也可以是一台服务器中包括的两个不同的功能模块。本申请实施例对此不做限定。
接下来对本申请实施例提供的更新活动榜单的方法进行介绍。
图2是本申请实施例提供的一种更新活动榜单的方法。该方法可以应用于服务器中,例如,可以应用于图1所示的第二服务器中。如图2所示,该方法包括以下步骤:
步骤201:获取第一消息,第一消息为属于第一活动时段的活动消息,第一活动时段为当前活动时段的上一活动时段。
在本申请实施例中,服务器中可以维护有一个消息队列。该消息队列中可以包括该服务器到当前时刻为止接收到的且还未处理的多个消息。服务器可以按照消息队列中各个消息从前到后的顺序,依次处理各个消息。其中,该多个消息可以按照服务器接收到各个消息的接收时间的先后顺序从前到后排列。可选地,该多个消息也可以按照各个消息的权重大小从前到后进行排列。或者,该多个消息也可以按照其他规则排序。其中,各个消息的权重可以用于指示各个消息的重要程度。
另外,在本申请实施例中,消息队列中的各个消息均携带有一个时间戳,该时间戳可以用于指示相应消息的生成时间,或者是相应消息所对应的操作的完成时间。根据每个消息的时间戳,可以确定该消息属于哪个活动时段。例如,假设消息A的时间戳为2019-12-12-23:30,第一活动时段为2019-12-12的18:00至24:00,则可以确定消息A属于第一活动时段。
由上述介绍可知,消息队列中各个消息的排列不一定会根据消息的时间戳进行排列,这样,时间戳较早的消息可能会排在时间戳较晚的消息之后。在这种情况下,在从第一活动时段进入到当前活动时段之后,可能还存在属于第一活动时段的消息未处理。基于此,服务器在当前活动时段内可以从该消息队列中读取属于第一活动时段的第一消息。
需要说明的是,各个活动时段的每个活动消息中均携带有一个用户的用户数据,该用户数据可以包括相应用户的用户标识和活动数据。其中,用户标识可以用于唯一标识相应用户,示例性地,用户标识可以为UID(User Identification,用户标识符)。活动数据为该用户参与该活动的用于生成榜单的数据。示例性地,假设在上述介绍的直播应用的场景中,该活动数据可以为赠送礼物的价值。
步骤202:根据第一消息对第一活动时段的活动榜单进行更新。
在获取到第一消息之后,服务器可以根据该第一消息对第一活动时段的活动榜单进行更新。
其中,第一活动时段的活动榜单是服务器根据当前时刻之前已处理的属于第一活动时段的多个活动消息得到的。该活动榜单内可以包括多个用户的用户数据。其中,该用户数据可以包括用户标识和该用户标识对应的活动数据。并且,在该活动榜单内,各个用户数据根据包括的活动数据的大小排列。
由前述步骤201中的介绍可知,活动消息中可以携带有用户标识和活动数据。基于此,在读取到第一消息之后,服务器可以从第一活动时段的活动榜单内查找是否存在第一消息携带的第一用户的用户标识。如果第一活动时段的活动榜单内存在第一用户的用户标识,则服务器可以根据第一消息携带的活动数据对活动榜单内第一用户的用户标识对应的活动数据进行更新。
示例性地,服务器可以将活动榜单内第一用户的用户标识对应的活动数据加上第一消息中携带的活动数据,以实现对活动榜单内的第一用户的用户标识对应的活动数据的更新。
例如,以上述直播应用场景为例,假设活动榜单内的各个用户标识对应的活动数据是各个用户标识所标识的主播到目前为止在第一活动时段内接收到的礼物总价值,而第一消息中携带的是某个观众用户向该主播赠送一次礼物的礼物价值,则服务器可以将此次赠送礼物的礼物价值加上活动榜单中该主播当前的礼物总价值,从而得到更新后的礼物总价值,用该更新后的礼物总价值来替换第一活动时段的活动榜单内该主播的礼物总价值。
可选地,如果第一活动时段的活动榜单内不存在第一用户的用户标识对应的活动数据,则服务器可以判断第一活动时段是否为当前活动的第一个活动时段,如果第一活动时段是当前活动的第一个活动时段,则服务器可以直接将第一消息中携带的第一用户的用户数据添加至第一活动时段的活动榜单内。
在将第一用户的用户数据添加至第一活动时段的活动榜单内时,服务器可以从第一活动时段的活动榜单内确定大于相邻的两个目标活动数据,这两个目标活动数据中的前一个目标活动数据大于第一用户的用户数据中包括的活动数据,后一个目标活动数据小于第一用户的用户数据中的活动数据。之后,服务器可以将第一用户的用户数据添加至这两个目标活动数据所在的记录之间。
可选地,如果第一活动时段不为当前活动的第一个活动时段,则服务器可以不根据该第一消息更新第一活动时段的活动榜单。
步骤203:获取第二消息,第二消息为属于当前活动时段的活动消息。
在根据第一消息对第一活动时段的活动榜单进行更新之后,服务器可以读取消息队列中该第一消息的下一个消息,并对下一个消息进行处理。其中,下一个消息有可能仍然为属于第一活动时段的活动消息,在这种情况下,服务器可以继续按照前述步骤202的实现方式根据这个消息对第一活动时段的活动榜单进行更新。可选地,下一个消息也可能为属于当前活动时段的活动消息,也即第二消息。在这种情况下,服务器可以执行步骤204。
步骤204:根据第二消息,对当前活动时段的全局榜单进行更新,全局榜单包括属于当前活动时段的所有消息携带的用户数据。
第二消息是属于当前活动时段的活动消息。由前述介绍可知,活动消息携带有用户标识和活动数据。基于此,第二消息中可以携带有第二用户的用户标识和活动数据。其中,第二用户有可能与第一用户是同一个用户,也可能是不同的用户。如果是同一个用户,则第二消息和第一消息实际上对应了该用户的两次操作。这样,第一消息和第二消息中的活动数据也可能相同,也可能不同。
在本申请实施例中,在每个活动时段内,服务器可以维护一个该活动时段的全局榜单。该全局榜单包括属于当前活动时段的所有消息携带的用户数据。
以当前活动时段为例,从进入当前活动时段开始,服务器在处理第一个属于当前活动时段的活动消息时,可以根据这个消息中包括的用户数据创建当前活动时段的活动榜单。之后,每当处理一个属于当前活动时段的活动消息时,如果全局榜单中已经存在该活动消息包括的用户标识,则根据该活动消息包括的活动数据对全局榜单中对应的用户标识所对应的活动数据进行更新,如果全局榜单中不存在该活动消息包括的用户标识,则服务器可以将该活动消息携带的用户数据添加至该全局榜单中。
基于此,服务器在获取到第二消息之后,可以首先判断当前是否已创建全局榜单,如果未创建全局榜单,则可以根据第二消息创建全局榜单,此时,该全局榜单中只包括第二消息携带的第二用户的用户数据。如果已创建全局榜单,则服务器可以从当前的全局榜单中查找是否包含有第二用户的用户标识。如果存在,则根据第二消息携带的第二用户的活动数据对全局榜单中第二用户的用户标识对应的活动数据进行更新。其中,根据第二消息携带的第二用户的活动数据对全局榜单进行更新的实现方式,可以参考前述步骤202中对第一活动时段内的活动榜单进行更新的方式,本申请实施例在此不再赘述。
步骤205:根据更新后的当前活动时段的全局榜单、更新后的第一活动时段的榜单,对当前活动时段的活动榜单进行更新。
在对全局榜单进行更新之后,服务器可以根据更新后的当前活动时段的榜单和更新后的第一活动时段的榜单,对当前活动时段的活动榜单进行更新。
示例性地,服务器可以从更新后的第一活动时段的活动榜单中获取对应的活动数据排在前N位的用户标识,得到N个晋级用户标识,N为大于0的整数;根据更新后的当前活动时段的全局榜单,确定N个晋级用户标识对应的目标活动数据;根据N个晋级用户标识和N个晋级用户标识对应的目标活动数据,生成当前活动时段的临时榜单;将当前活动时段的临时榜单作为当前活动时段的活动榜单。
在当前活动中,可以根据预设的晋级数量N来确定从一个活动时段晋级到下一个活动时段的晋级用户。在本申请实施例中,在进入到当前活动时段之后,由于可以通过步骤202继续根据属于第一活动时段的消息对第一活动时段的活动榜单进行更新,因此,在根据第一消息得到更新后的第一活动时段的活动榜单之后,服务器可以根据更新后的第一活动时段的活动榜单实时的更新晋级到当前活动时段的晋级用户。也即,服务器可以从更新后的第一活动时段的活动榜单中获取排在前N位的用户标识,作为晋级到当前活动时段内的晋级用户的晋级用户标识。
在得到N个晋级用户标识之后,由于服务器中维护有实时更新的当前活动时段的全局榜单,因此,服务器可以根据更新后的全局榜单,生成包含有这N个晋级用户的当前活动时段的临时榜单。
其中,服务器可以从更新后的全局榜单中查找每个晋级用户标识;对于查找到的晋级用户标识,从更新后的全局榜单中获取查找到的晋级用户标识对应的活动数据,将获取的活动数据作为相应晋级用户标识对应的目标活动数据;对于未查找到的晋级用户标识,将未查找到的晋级用户标识对应的目标活动数据设置为0。
虽然全局榜单中包含有所有已处理的属于当前活动时段榜单的活动消息的用户标识所对应的数据,但是,晋级用户中可能存在还未在当前活动时段内执行相应操作的用户,也即,已处理的属于当前活动时段的活动消息中不存在晋级用户对应的活动消息,在这种情况下,全局榜单中将不会存在该晋级用户的用户标识。基于此,对于每个晋级用户标识,服务器可以首先从更新后的全局榜单中查找是否存在该晋级用户标识,如果存在,服务器可以获取全局榜单中的该晋级用户标识对应的活动数据,将获取的活动数据作为该晋级用户标识对应的目标活动数据。可选地,如果全局榜单中不存在该晋级用户标识,则服务器可以直接将该晋级用户标识的目标活动数据设置为0。
在确定了N个晋级用户标识对应的目标活动数据之后,服务器可以按照这N个晋级用户标识对应的活动数据的大小对N个晋级用户标识和对应的活动数据进行排序,从而得到当前活动时段的临时榜单。
在得到当前活动时段的临时榜单之后,如果第二消息为服务器处理的第一个属于当前活动时段的活动消息,则服务器中还不存在当前活动时段的活动榜单,在这种情况下,服务器可以直接将生成的当前活动时段的临时榜单作为当前活动时段的活动榜单。
可选地,如果第二消息不为服务器处理的第一个属于当前活动时段的活动消息,则在当前时刻之前,该服务器就已经根据第一个属于当前活动时段的活动消息创建了当前活动时段的活动榜单。在这种情况下,服务器可以直接用生成的临时榜单来替换已存在的当前活动时段的活动榜单。也即,直接将该临时榜单作为当前活动时段的榜单。
由此可见,在当前时段内,通过实时更新第一活动时段的活动榜单来实时更新晋级用户,进而根据更新后的晋级用户来更新当前活动时段的活动榜单,这样可以保证当前活动时段的活动榜单内包括的晋级用户与第一活动时段的活动榜单中应该晋级的用户始终一致。
在本申请实施例中,服务器可以根据第一消息来对第一活动时段的活动榜单进行更新,之后,根据第二消息对当前活动时段的全局榜单进行更新。由于全局榜单中包含了属于当前活动时段的所有消息携带的用户数据,因此,即使第一消息延迟了,根据更新后的全局榜单和更新后的第一活动时段的榜单也依然可以得到当前活动时段的正确活动榜单,避免了由于消息延迟所导致的晋级用户错误,进而导致的当前活动时段的活动榜单错误的问题。
另外,由于本申请实施例中,在当前活动时段,可以根据属于第一活动时段的活动消息实时对第一活动时段的活动榜单进行更新,也即可以根据实时更新的第一活动时段的活动榜单来更新晋级到当前活动时段的晋级用户,进而根据更新的晋级用户来生成当前活动时段的活动榜单,因此可见,相较于相关技术,本申请无需在一个活动时段的下一个活动时段内设置指定时刻来进行榜单结算以确定晋级用户,这样,在活动测试过程中,可以更为方便的更改配置各个活动时段的时间区间,无需因为更改了活动时段的时间区间配置而更改对应的指定时刻,提高了测试效率。
接下来,以前述的直播应用中设置的主播竞赛活动为例,对本申请实施例提供的活动榜单的更新方法的效果进行举例说明。
假设该主播竞赛活动包括三个活动时段,分别为S1时段、S2时段和S3时段。假设2019-12-02的00:00:00之前为S1时段,2019-12-02的00:00:00-23:59为S2时段,2019-12-3的00:00之后为S3时段。目前消息队列中包括有四个未处理的活动消息,按照这四个活动消息在消息队列中的先后顺序分别为消息A、消息B、消息C和消息D。各个消息携带的用户数据和对应的时间戳如图3所示。其中,消息A的时间戳为2019-12-01-23:59:59,携带的用户标识为UID1,对应的活动数据为10。消息B的时间戳为2019-12-02-00:00:00,携带的用户标识为UID2,对应的活动数据为100。消息C的时间戳为2019-12-01-23:59:58,携带的用户标识为UID4,对应的活动数据为11000。消息D的时间戳为2019-12-02-00:00:15,携带的用户标识为UID4,对应的活动数据为1000。
在相关技术中,假设处理消息A之前,S1时段的榜单如图4所示,其中,UID1对应的活动数据为10000,排在第一位,UID2对应的活动数据为9000,排在第二位,UID3对应的活动数据为8000,排在第三位,UID4对应的活动数据为7000,排在第四位。服务器可以先处理消息A,由于消息A为属于S1时段的消息,所以,根据消息A中UID1对应的活动数据10,可以将S1榜单中的UID1对应的10000更新为10010,从而得到的更新后的榜单如图5所示。
假设在处理完消息A之后且还未处理消息C之前,到达了为S1时段设置的用于确定晋级用户的指定时刻,且预设的晋级数量为3,则由于服务器仅处理完了消息队列中的消息A,还未来得及处理消息C,因此,根据处理消息A之后得到的如图5所示的榜单得到的晋级用户将为UID1、UID2和UID3。后续,服务器将根据属于S2时段的活动消息中包括的UID1、UID2和UID3的活动数据,来实时更新S2时段的活动榜单,也即,S2时段的活动榜单中显示的晋级到S2时段将为UID1、UID2和UID3。
然而,在过了指定时刻之后,当处理到消息C时,服务器根据消息C对S1时段的榜单进行更新后,得到的更新后的S1时段的榜单将如图6所示,此时,由更新后的S1时段的榜单可以看出,实际应该晋级到S2时段的用户应该为UID1、UID2和UID4,也即,由于消息C的延迟,导致S3错误晋级到了S2时段。
而对于上述场景,如果采用本申请实施例提供的方法来更新榜单,则服务器根据消息A得到如图5所示的S1时段的榜单之后,确定出晋级用户为UID1、UID2和UID3。
之后,服务器可以根据消息B,得到S2时段的全局榜单,该全局榜单包括UID2和对应的活动数据100。根据晋级用户UID1、UID2和UID3,得到S2时段的活动榜单如图7所示。
接下来,服务器处理消息C,由于消息C属于S1时段,所以,根据消息C中携带的活动数据11000,将图5所示的S1时段的榜单中UID4对应的活动数7000更新为18000,并重新排序,得到更新后的S1时段的榜单如图6所示。
之后,服务器处理消息D,由于消息D属于S2时段,所以,服务器可以首先从图6所示的榜单中重新选取晋级用户,此时,选取的晋级用户即为UID1、UID2和UID4。之后,服务器可以根据消息D更新全局榜单,得到更新后的全局榜单中包含有UID4和UID2,其中UID4对应的活动数据为1000,UID2对应的活动数据为100。服务器从全局榜单中获取晋级用户UID2和UID4对应的活动数据作为目标活动数据,并且,由于全局榜单中不包含有UID1,所以,将UID1对应的目标活动数据设置为0。之后,根据UID1、UID2和UID4以及各自对应的目标活动数据,生成S2时段的临时榜单,如图8所示,用该临时榜单覆盖图7所示的S2时段的榜单,从而实现对S2时段的榜单的更新。
由此可见,通过实时更新S1时段的榜单,并通过S1时段的榜单来更新晋级用户,进而根据维护的当前时段的全局榜单和更新后的晋级用户来更新当前时段的榜单,可以改正消息延迟时由于数据未来得及结算所导致的晋级错误,从而使得S2时段的榜单中包括的晋级用户与S1时段的榜单中实际可晋级的用户保持一致。
接下来,对本申请实施例提供的更新活动榜单的装置进行介绍。
参见图9,本申请实施例提供了一种更新活动榜单的装置300,该装置300包括:
获取模块301,用于获取第一消息,第一消息为属于第一活动时段的活动消息,第一活动时段为当前活动时段的上一活动时段;
第一更新模块302,用于根据第一消息对第一活动时段的活动榜单进行更新;
第二获取模块303,还用于获取第二消息,第二消息为属于当前活动时段的活动消息;
第二更新模块304,还用于根据第二消息,对当前活动时段的全局榜单进行更新,全局榜单包括属于当前活动时段的所有消息携带的用户数据;
第三更新模块305,还用于根据更新后的当前活动时段的全局榜单、更新后的第一活动时段的榜单,对当前活动时段的活动榜单进行更新。
可选地,第二消息携带第二用户的用户数据,用户数据包括用户标识和活动数据;
第二更新模块304具体用于:
如果全局榜单中存在第二消息携带的第二用户的用户标识,则根据第二消息携带的第二用户的活动数据,对全局榜单中的第二用户的用户标识所对应的活动数据进行更新。
可选地,第二更新模块304具体还用于:
如果全局榜单中不存在第二消息携带的第二用户的用户标识,则在全局榜单中添加第二用户的用户数据。
可选地,活动榜单包括多个用户的用户数据,用户数据包括用户标识和活动数据;
第三更新模块305具体用于:
从更新后的第一活动时段的活动榜单中获取对应的活动数据排在前N位的用户标识,得到N个晋级用户标识,N为大于0的整数;
根据更新后的当前活动时段的全局榜单,确定N个晋级用户标识对应的目标活动数据;
根据N个晋级用户标识和N个晋级用户标识对应的目标活动数据,生成当前活动时段的临时榜单;
将当前活动时段的临时榜单作为当前活动时段的活动榜单。
可选地,第三更新模块305具体用于:
从更新后的全局榜单中查找每个晋级用户标识;
对于查找到的晋级用户标识,从更新后的全局榜单中获取查找到的晋级用户标识对应的活动数据,将获取的活动数据作为相应晋级用户标识对应的目标活动数据;
对于未查找到的晋级用户标识,将未查找到的晋级用户标识对应的目标活动数据设置为0。
可选地,第一消息携带第一消息的时间戳,第二消息携带第二消息的时间戳,时间戳用于指示相应消息的生成时间,或者,时间戳用于指示相应消息所对应的操作的完成时间。
可选地,第一消息和第二消息均位于消息队列中,且第一消息位于第二消息之前,消息队列包括多个消息,多个消息按照多个消息的接收时间先后顺序排列,或者,多个消息按照多个消息的权重大小排列。
综上所述,本申请实施例可以根据第一消息来对第一活动时段的活动榜单进行更新,之后,根据第二消息对当前活动时段的全局榜单进行更新。由于全局榜单中包含了属于当前活动时段的所有消息携带的用户数据,因此,即使第一消息延迟了,根据更新后的全局榜单和更新后的第一活动时段的榜单也依然可以得到当前活动时段的正确活动榜单,避免了由于消息延迟所导致的晋级用户错误,进而导致的当前活动时段的活动榜单错误的问题。
需要说明的是:上述实施例提供的更新活动榜单的装置在更新活动榜单时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的更新活动榜单的装置与更新活动榜单的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图10是根据一示例性实施例示出的一种用于更新活动榜单的服务器400结构示意图。上述图2-8所示的实施例中的服务器的功能即可以通过图10中所示的服务器来实现。该服务器可以是后台服务器集群中的服务器。具体来讲:
服务器400包括中央处理单元(CPU)401、包括随机存取存储器(RAM)402和只读存储器(ROM)403的***存储器404,以及连接***存储器404和中央处理单元401的***总线405。服务器400还包括帮助计算机内的各个器件之间传输信息的基本输入/输出***(I/O***)406,和用于存储操作***413、应用程序414和其他程序模块415的大容量存储设备407。
基本输入/输出***406包括有用于显示信息的显示器408和用于用户输入信息的诸如鼠标、键盘之类的输入设备409。其中显示器408和输入设备409都通过连接到***总线405的输入输出控制器410连接到中央处理单元401。基本输入/输出***406还可以包括输入输出控制器410以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器410还提供输出到显示屏、打印机或其他类型的输出设备。
大容量存储设备407通过连接到***总线405的大容量存储控制器(未示出)连接到中央处理单元401。大容量存储设备407及其相关联的计算机可读介质为服务器400提供非易失性存储。也就是说,大容量存储设备407可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的***存储器404和大容量存储设备407可以统称为存储器。
根据本申请的各种实施例,服务器400还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器400可以通过连接在***总线405上的网络接口单元411连接到网络412,或者说,也可以使用网络接口单元411来连接到其他类型的网络或远程计算机***(未示出)。
上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。所述一个或者一个以上程序包含用于进行本申请实施例提供的更新活动榜单的方法的指令。
本申请实施例还提供了一种非临时性计算机可读存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行上述图2-8所示实施例提供的更新活动榜单的方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述图2-8所示实施例提供的更新活动榜单的方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的可选实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。