排名更新方法、装置和计算机设备与流程

文档序号:11177319阅读:254来源:国知局
排名更新方法、装置和计算机设备与流程
本申请涉及互联网
技术领域
,尤其涉及一种排名更新方法、装置和计算机设备。
背景技术
:现有相关技术中,游戏中对战力进行排名的需求极其常见,比如在游戏的打擂台活动中,需要对玩家战力进行排名,但是即便大多时候只有少数玩家的排名发生变化,对玩家排名的实时更新总是需要对所有玩家的战力进行排序,所以时间成本很高。目前,对玩家战力进行排名的常用方式有两个:区间树和索引。区间树将所有玩家的战力分为一个个区间,利用二叉树组织起来,这样查询和更新的时间复杂度均为o(logn);索引记录每个战力当前的排名,查询时间复杂度为o(1),更新时间复杂度为o(n)。但是,通过区间树和索引对玩家战力进行排名的方式均存在更新时间复杂度较高的问题,更新的时间成本较高。技术实现要素:为克服相关技术中存在的问题,本申请提供一种排名更新方法、装置和计算机设备。为达到上述目的,本申请的实施例采用如下技术方案:第一方面,本申请实施例提供一种排名更新方法,包括:接收用户对应用程序的操作信息,根据所述操作信息向所述用户展示所述应用程序的界面;将所述用户的标识和所述用户前次使用所述应用程序的第一结果数据保存到缓冲区中的第一缓冲区;将所述第一结果数据与所述第一缓冲区保存的第一索引中的结果数据进行比对,获得所述第一结果数据在所述第一索引中的排名;在所述用户本次使用所述应用程序完毕之后,将所述用户本次使用所述应用程序的第二结果数据保存到所述第一缓冲区;如果所述第一缓冲区中的用户的数量小于预定阈值,则将所述第二结果数据与所述第一缓冲区保存的第二索引中的结果数据进行比对,获得所述第二结果数据在所述第二索引中的排名;根据所述第二结果数据、所述第一索引和所述第二索引,获得所述用户在使用所述应用程序的所有用户中的排名。第二方面,本申请实施例提供一种排名更新装置,包括:接收模块,用于接收用户对应用程序的操作信息;展示模块,用于根据所述接收模块接收的操作信息向所述用户展示所述应用程序的界面;保存模块,用于将所述用户的标识和所述用户前次使用所述应用程序的第一结果数据保存到缓冲区中的第一缓冲区;排名获得模块,用于将所述第一结果数据与所述第一缓冲区保存的第一索引中的结果数据进行比对,获得所述第一结果数据在所述第一索引中的排名;所述保存模块,还用于在所述用户本次使用所述应用程序完毕之后,将所述用户本次使用所述应用程序的第二结果数据保存到所述第一缓冲区;所述排名获得模块,还用于当所述第一缓冲区中的用户的数量小于预定阈值时,将所述第二结果数据与所述第一缓冲区保存的第二索引中的结果数据进行比对,获得所述第二结果数据在所述第二索引中的排名;以及根据所述第二结果数据、所述第一索引和所述第二索引,获得所述用户在使用所述应用程序的所有用户中的排名。第三方面,本申请实施例提供一种计算机设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上所述的方法。第四方面,本申请实施例提供一种非临时性计算机可读存储介质,当所述存储介质中的计算机可执行指令在由计算机处理器执行时,用于执行如上所述的方法。本申请实施例提供的技术方案可以包括以下有益效果:在根据用户对应用程序的操作信息,向上述用户展示上述应用程序的界面之后,将上述用户的标识和上述用户前次使用上述应用程序的第一结果数据保存到缓冲区中的第一缓冲区,然后将上述第一结果数据与上述第一缓冲区保存的第一索引中的结果数据进行比对,获得第一结果数据在第一索引中的排名;在用户本次使用上述应用程序完毕之后,将用户本次使用上述应用程序的第二结果数据保存到上述第一缓冲区,如果第一缓冲区中的用户的数量小于预定阈值,则将第二结果数据与第一缓冲区保存的第二索引中的结果数据进行比对,获得第二结果数据在上述第二索引中的排名,根据第二结果数据、第一索引和第二索引,获得上述用户在使用上述应用程序的所有用户中的排名,从而可以实现利用时间局部性,在第一缓冲区中对最近一段时间内使用上述应用程序的用户进行排名,实现了用户排名的快速更新,大大降低了实时更新排名的时间成本。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。图1为本申请排名更新方法一个实施例的流程图;图2为本申请排名更新方法另一个实施例的流程图;图3为本申请排名更新方法再一个实施例的流程图;图4为本申请排名更新方法再一个实施例的流程图;图5为本申请排名更新方法再一个实施例的流程图;图6为本申请排名更新装置一个实施例的结构示意图;图7为本申请排名更新装置另一个实施例的结构示意图;图8为本申请计算机设备一个实施例的结构示意图。通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。时间局部性是指单个用户排名多次变化具有时间邻近性,即排名刚发生变化的用户相比其他用户,在未来一段时间内,其排名再次发生变化的概率更大。本申请利用时间局部性区别对待用户,以实现用户排名的快速排序更新。具体是,将缓冲区分为两层,第一缓冲区维护最近排名发生更新的用户;第二缓冲区存储所有用户,第一缓冲区和第二缓冲区均利用索引排序。一般情况下,本申请只需调用第一缓冲区排序来实现用户排名的快速更新,因为第一缓冲区中的用户数量很少,因此可以大大降低实时更新排名的时间成本。在具体实现时,第一缓冲区可以是上述缓冲区中的上层缓冲区,第二缓冲区可以是上述缓冲区中的底层缓冲区,当然本实施例并不局限于此,也可以采用其他方式将缓冲区划分为两个缓冲区,本实施例对此不作限定。图1为本申请排名更新方法一个实施例的流程图,本实施例中的排名更新方法可以由服务器实现,如图1所示,上述排名更新方法可以包括:步骤101,接收用户对应用程序的操作信息,根据上述操作信息向上述用户展示上述应用程序的界面。其中,上述操作信息可以为上述用户对应用程序的图标的触发信息,例如:对上述应用程序的图标进行单次点击、双击或长按等操作,本实施例对上述操作信息的具体形式不作限定。本实施例中,接收到上述操作信息之后,可以根据上述操作信息向上述用户展示上述应用程序的界面。步骤102,将上述用户的标识和上述用户前次使用上述应用程序的第一结果数据保存到缓冲区中的第一缓冲区。其中,上述用户的标识为可以唯一表示上述用户的信息,例如上述用户的用户名和/或上述用户使用的终端设备的设备号等,本实施例对上述用户的标识不作限定。本实施例中,在根据上述操作信息向上述用户展示上述应用程序的界面之后,服务器可以获得上述用户的标识,以及上述用户前次使用上述应用程序的第一结果数据,并将上述用户的标识和上述用户前次使用上述应用程序的第一结果数据保存到缓冲区中的第一缓冲区。以上述应用程序为游戏为例,上述应用程序的界面可以为游戏的打擂台的界面,上述用户使用应用程序即为用户玩游戏的打擂台这个活动,玩这个活动,会使用户的战力发生变化,上述用户前次使用上述应用程序的第一结果数据即为上述用户前次打擂台的战力。在此假设战力范围只能在91到100的范围内变动,初始状态下,使用上述应用程序的所有用户的结果数据,即参加过打擂台活动的所有用户的战力和排名如表1所示。表1用户abcdef战力1009594939291排名123456本例中,用户c和e准备参加打擂台活动,打开了打擂台活动的界面,因此游戏服务器将用户c和e的标识,以及用户c和e前次打擂台的战力保存到第一缓冲区,其中,用户c和e前次打擂台的战力分别为94和92。步骤103,将上述第一结果数据与上述第一缓冲区保存的第一索引中的结果数据进行比对,获得上述第一结果数据在上述第一索引中的排名。其中,第一索引记录上述第一缓冲区中的用户在本次使用上述应用程序之前的结果数据和对应的在第一索引中的排名。仍以游戏的打擂台活动为例,将用户c和e前次打擂台的战力94和92,与第一索引中的战力进行比对,可以获得用户c和e前次打擂台的战力94和92在第一索引中的排名,如表2所示。表2战力100999897969594939291排名1111111223从表2中可以看出,由于只有用户c和用户e打开了打擂台活动的界面,因此第一缓冲区中只有用户c和用户e,用户c前次打擂台的战力为94,用户e前次打擂台的战力为92,因此94排名为1,92的排名为2。而第一索引中,对于没有对应用户的结果数据(为了描述方便,这里将没有对应用户的结果数据称为第三结果数据)的排名,与比上述第三结果数据低且有对应用户的最接近的结果数据的排名相同,例如表2中,战力100没有对应的用户,比战力100低且有对应用户的最接近的战力为94,94的排名为1,因此战力100的排名也为1,同理对于战力99~95,排名也为1。步骤104,在上述用户本次使用上述应用程序完毕之后,将上述用户本次使用上述应用程序的第二结果数据保存到上述第一缓冲区。仍以游戏的打擂台活动为例,用户本次使用上述应用程序完毕,即为用户本次打擂台结束。在用户本次打擂台结束之后,游戏服务器将用户本次打擂台的战力保存到上述第一缓冲区。本例中,用户c和e打擂台结束之后,用户c和e的战力分别为96和97,游戏服务器将用户c和e的战力96和97保存到第一缓冲区。步骤105,如果上述第一缓冲区中的用户的数量小于预定阈值,则将上述第二结果数据与上述第一缓冲区保存的第二索引中的结果数据进行比对,获得上述第二结果数据在上述第二索引中的排名。其中,上述第二索引记录第一缓冲区中的用户在本次使用上述应用程序之后的结果数据和对应的在第二索引中的排名。上述预定阈值可以在具体实现时,根据系统性能和/或实现需求等自行设定,本实施例对上述预定阈值的大小不作限定,举例来说,上述预定阈值可以为3。仍以游戏的打擂台活动为例,将用户c和e本次打擂台的战力96和97,与第二索引中的战力进行比对,可以获得用户c和e本次打擂台的战力96和97在第二索引中的排名,如表3所示。表3战力100999897969594939291排名1111233333从表3中可以看出,用户c本次打擂台的战力96在第二索引中排名为2,用户e本次打擂台的战力97在第二索引中排名为1。同样,第二索引中,对于没有对应用户的第三结果数据的排名,与比上述第三结果数据低且有对应用户的最接近的结果数据的排名相同,例如表3中,战力100没有对应的用户,比战力100低且有对应用户的最接近的战力为97,97的排名为1,因此战力100的排名也为1,同理对于战力99~98,排名也为1。步骤106,根据上述第二结果数据、上述第一索引和上述第二索引,获得上述用户在使用上述应用程序的所有用户中的排名。本实施例中,根据用户本次使用上述应用程序的第二结果数据,第一索引和第二索引,即可获得上述用户在使用上述应用程序的所有用户中的排名,上述排名更新方法利用时间局部性,仅在第一缓冲区中对最近一段时间内使用上述应用程序的用户进行排名,从而实现了用户排名的快速更新,大大降低了实时更新排名的时间成本。图2为本申请排名更新方法另一个实施例的流程图,如图2所示,本申请图1所示实施例中,步骤106可以包括:步骤201,通过第三索引查询获得上述第二结果数据在使用上述应用程序的所有用户的结果数据中的排名。这里的使用上述应用程序的所有用户的结果数据为在上述用户本次使用上述应用程序之前,使用上述应用程序的所有用户的结果数据。其中,上述第三索引记录使用上述应用程序的所有用户的结果数据和对应的在第三索引中的排名。仍以游戏的打擂台活动为例,根据表1中保存的参加过打擂台活动的用户的战力和排名生成的第三索引,可以如表4所示。表4战力100999897969594939291排名1222223456同样在第三索引中,对于没有对应用户的第三结果数据的排名,与比上述第三结果数据低且有对应用户的最接近的结果数据的排名相同。例如表4中,战力99没有对应的用户,比战力99低且有对应用户的最接近的战力为95,95的排名为2,因此战力99的排名也为2,同理对于战力98~96,排名也为2。对于用户c来说,上述第二结果数据即为用户c本次打擂台的战力96,通过查询表4所示的第三索引,可以获得战力96,在用户c打擂台之前参加过打擂台活动的所有用户的战力中,排名为2。对于用户e来说,上述第二结果数据即为用户e本次打擂台的战力97,通过查询表4所示的第三索引,可以获得战力97,在用户e打擂台之前参加过打擂台活动的所有用户的战力中,排名为2。步骤202,通过第一索引查询获得上述第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之前的结果数据比上述第二结果数据高的用户的数量。仍以游戏的打擂台活动为例,通过查询表2所示的第一索引,可以获得用户c本次打擂台的战力96的排名为1,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之前的战力比用户c打擂台之后的战力高的用户的数量为0;同理,通过查询表2所示的第一索引,可以获得用户e本次打擂台的战力97的排名为1,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之前的战力比用户e打擂台之后的战力高的用户的数量为0。步骤203,通过第二索引查询获得上述第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之后的结果数据比上述第二结果数据高的用户的数量。仍以游戏的打擂台活动为例,通过查询表3所示的第二索引,可以获得用户c本次打擂台的战力96的排名为2,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之后的战力比用户c打擂台之后的战力高的用户的数量为1;同理,通过查询表3所示的第二索引,可以获得用户e本次打擂台的战力97的排名为1,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之后的战力比用户e打擂台之后的战力高的用户的数量为0。步骤204,将通过第三索引查询获得的排名减去通过第一索引查询获得的用户的数量,所得的差值再加上通过第二索引查询获得的用户的数量,所得的和值为上述用户在使用上述应用程序的所有用户中的排名。仍以游戏的打擂台活动为例,对于用户c来说,用户c在本次打擂台之后在参加打擂台的所有用户中的排名为:2-0+1=3;而对于用户e来说,用户e在本次打擂台之后在参加打擂台的所有用户中的排名为:2-0+0=2。上述实施例中,根据用户本次使用应用程序的第二结果数据、第一缓冲区中保存的第一索引和第二索引,即可获得上述用户在本次使用应用程序之后在使用上述应用程序的所有用户中的排名,实现了利用时间局部性对用户排名进行快速更新,由于第一缓冲区中保存的用户数量很少,因此即使频繁更新排名,时间成本也很低,大大降低了实时更新排名的时间成本。图3为本申请排名更新方法再一个实施例的流程图,本实施例中的排名更新方法可以由服务器实现,如图3所示,上述排名更新方法可以包括:步骤301~步骤303,同步骤101~步骤103。步骤304,根据上述第一结果数据、第一索引和第二索引,获得上述用户本次使用上述应用程序之前在使用上述应用程序的所有用户中的排名。也就是说,在用户打开上述应用程序的界面之后,本次使用上述应用程序之前,服务器可以根据用户前次使用上述应用程序的第一结果数据,第一缓冲区中保存的第一索引和第二索引,获得上述用户本次使用上述应用程序之前在使用上述应用程序的所有用户中的排名。图4为本申请排名更新方法再一个实施例的流程图,如图4所示,本申请图3所示实施例中,步骤304可以包括:步骤401,通过第三索引查询获得上述第一结果数据在使用上述应用程序的所有用户的结果数据中的排名。仍以游戏的打擂台活动为例,这里假设用户d在打擂台之前想查询一下自身当前的排名,参见表1,用户d前次打擂台的战力为93,通过查询表4所示的第三索引,可以获得战力93在所有用户的战力中的排名为4。步骤402,通过第一索引查询获得上述第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之前的结果数据比第一结果数据高的用户的数量。仍以游戏的打擂台活动为例,通过查询表2所示的第一索引,可以获得用户d前次打擂台的战力93的排名为2,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之前的战力比用户d打擂台之前的战力高的用户的数量为1。步骤403,通过第二索引查询获得所述第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之后的结果数据比上述第一结果数据高的用户的数量。仍以游戏的打擂台活动为例,通过查询表3所示的第二索引,可以获得用户d前次打擂台的战力93的排名为3,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之后的战力比用户d打擂台之前的战力高的用户的数量为2。步骤404,将通过第三索引查询获得的排名减去通过第一索引查询获得的用户的数量,所得的差值再加上通过第二索引查询获得的用户的数量,所得的和值为上述用户本次使用上述应用程序之前在使用上述应用程序的所有用户中的排名。具体地,对于用户d来说,用户d在本次打擂台之前在参加打擂台的所有用户中的排名为:4-1+2=5。上述实施例,同样是在第一缓冲区中,根据用户前次使用应用程序的第一结果数据,第一缓冲区中保存的第一索引和第二索引,即可获得上述用户在本次使用应用程序之前在使用上述应用程序的所有用户中的排名,实现了利用时间局部性对用户排名进行快速更新,由于第一缓冲区中保存的用户数量很少,因此即使频繁更新排名,时间成本也很低,大大降低了实时更新排名的时间成本。图5为本申请排名更新方法再一个实施例的流程图,本实施例中的排名更新方法可以由服务器实现,如图5所示,上述排名更新方法可以包括:步骤501~步骤504,同步骤101~步骤104。步骤505,如果上述第一缓冲区中的用户的数量达到预定阈值,则将第二结果数据与第三索引记录的结果数据进行比对,获得上述第二结果数据在上述第三索引中的排名,作为上述用户在使用上述应用程序的所有用户中的排名。本实施例中,如果上述第一缓冲区中的用户的数量达到预定阈值,那么在上述用户使用上述应用程序完毕之后,就不能在第一缓冲区中对用户进行排名了,需要调用第二缓冲区进行排名,即将上述用户本次使用应用程序的第二结果数据在使用上述应用程序的所有用户的结果数据中进行排名,获得上述第二结果数据在第三索引中的排名,以实现对第三索引的更新。步骤506,清空上述第一索引、上述第二索引和第一缓冲区。具体地,一旦第一缓冲区中的用户的数量达到预定阈值,调用第二缓冲区进行排名,将上述第二结果数据在使用上述应用程序的所有用户的结果数据中进行排名,获得上述第二结果数据在第三索引中的排名,以实现对第三索引的更新之后,然后需要清空第一索引和第二索引,以及第一缓冲区。本申请实施例提供的排名更新方法,利用用户排名变动的时间局部性原理,考虑到大多时候只有使用应用程序的少数用户的排名频繁变动,因此本申请在第一缓冲区维护最近排名发生更新的用户,并将缓冲区分为两层,第一缓冲区只对使用应用程序的用户进行排名;第二缓冲区对使用上述应用程序的所有用户进行排名,两层都使用索引进行排序,记录每个结果数据的排名。因为更多情况下是最近刚更新排名的用户导致使用应用程序的用户的排名发生变动,所以,大多时候只需调用第一缓冲区进行排序即可实现用户排名的快速更新,只有当第一缓冲区中的用户的数量达到预定阈值时,才会启动底层排名。以游戏的打擂台活动为例,因为同时在线的用户占全服务器注册用户的比例很小,而同时在线的用户中参加打擂台活动的比例又很小,所以第一缓冲区中保存的用户数量m很小,此时第一缓冲区可采用索引记录每个战力的排名,查询时间成本为o(1),更新时间成本为o(m);而当m达到预定阈值,此时需要将第一缓冲区中保存的用户和第二缓冲区保存的所有未参加打擂台活动的用户进行排名更新,更新时间成本为o(n),并清空第一缓冲区中的用户,其中n为第一缓冲区中保存的用户和第二缓冲区保存的所有未参加打擂台活动的用户的总数,本申请能保证第一缓冲区中的用户数量始终很少,从而查询排名和更新排名的时间成本很低,另外由于第二缓冲区对所有用户排名的频率低,采用索引排序也足以应对压力。下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。图6为本申请排名更新装置一个实施例的结构示意图,本实施例中的排名更新装置可以作为服务器,或者服务器的一部分实现本申请图1~图5所示实施例提供的排名更新方法,上述排名更新装置可以包括:接收模块61、展示模块62、保存模块63和排名获得模块64;其中,接收模块61,用于接收用户对应用程序的操作信息;其中,上述操作信息可以为上述用户对应用程序的图标的触发信息,例如:对上述应用程序的图标进行单次点击、双击或长按等操作,本实施例对上述操作信息的具体形式不作限定。展示模块62,用于根据接收模块61接收的操作信息向上述用户展示上述应用程序的界面;本实施例中,接收模块61接收到上述操作信息之后,展示模块62可以根据上述操作信息向上述用户展示上述应用程序的界面。保存模块63,用于将上述用户的标识和上述用户前次使用上述应用程序的第一结果数据保存到缓冲区中的第一缓冲区;其中,上述用户的标识为可以唯一表示上述用户的信息,例如上述用户的用户名和/或上述用户使用的终端设备的设备号等,本实施例对上述用户的标识不作限定。本实施例中,在根据上述操作信息向上述用户展示上述应用程序的界面之后,服务器可以获得上述用户的标识,以及上述用户前次使用上述应用程序的第一结果数据,然后保存模块63将上述用户的标识和上述用户前次使用上述应用程序的第一结果数据保存到缓冲区中的第一缓冲区。以上述应用程序为游戏为例,上述应用程序的界面可以为游戏的打擂台的界面,上述用户使用应用程序即为用户玩游戏的打擂台这个活动,玩这个活动,会使用户的战力发生变化,上述用户前次使用上述应用程序的第一结果数据即为上述用户前次打擂台的战力。在此假设战力范围只能在91到100的范围内变动,初始状态下,使用上述应用程序的所有用户的结果数据,即参加过打擂台活动的所有用户的战力和排名如表1所示。本例中,用户c和e准备参加打擂台活动,打开了打擂台活动的界面,因此保存模块63将用户c和e的标识,以及用户c和e前次打擂台的战力保存到第一缓冲区,其中,用户c和e前次打擂台的战力分别为94和92。排名获得模块64,用于将上述第一结果数据与上述第一缓冲区保存的第一索引中的结果数据进行比对,获得上述第一结果数据在上述第一索引中的排名;其中,第一索引记录上述第一缓冲区中的用户在本次使用上述应用程序之前的结果数据和对应的在第一索引中的排名。仍以游戏的打擂台活动为例,排名获得模块64将用户c和e前次打擂台的战力94和92,与第一索引中的战力进行比对,可以获得用户c和e前次打擂台的战力94和92在第一索引中的排名,如表2所示。从表2中可以看出,由于只有用户c和用户e打开了打擂台活动的界面,因此第一缓冲区中只有用户c和用户e,用户c前次打擂台的战力为94,用户e前次打擂台的战力为92,因此94排名为1,92的排名为2。而第一索引中,对于没有对应用户的结果数据(为了描述方便,这里将没有对应用户的结果数据称为第三结果数据)的排名,与比上述第三结果数据低且有对应用户的最接近的结果数据的排名相同,例如表2中,战力100没有对应的用户,比战力100低且有对应用户的最接近的战力为94,94的排名为1,因此战力100的排名也为1,同理对于战力99~95,排名也为1。保存模块63,还用于在上述用户本次使用所述应用程序完毕之后,将上述用户本次使用上述应用程序的第二结果数据保存到第一缓冲区;仍以游戏的打擂台活动为例,用户本次使用上述应用程序完毕,即为用户本次打擂台结束。在用户本次打擂台结束之后,保存模块63将用户本次打擂台的战力保存到上述第一缓冲区。本例中,用户c和e打擂台结束之后,用户c和e的战力分别为96和97,保存模块63将用户c和e的战力96和97保存到第一缓冲区。排名获得模块64,还用于当上述第一缓冲区中的用户的数量小于预定阈值时,将上述第二结果数据与上述第一缓冲区保存的第二索引中的结果数据进行比对,获得第二结果数据在上述第二索引中的排名;以及根据第二结果数据、第一索引和第二索引,获得上述用户在使用上述应用程序的所有用户中的排名。其中,上述第二索引记录第一缓冲区中的用户在本次使用上述应用程序之后的结果数据和对应的在第二索引中的排名。上述预定阈值可以在具体实现时,根据系统性能和/或实现需求等自行设定,本实施例对上述预定阈值的大小不作限定,举例来说,上述预定阈值可以为3。仍以游戏的打擂台活动为例,排名获得模块64将用户c和e本次打擂台的战力96和97,与第二索引中的战力进行比对,可以获得用户c和e本次打擂台的战力96和97在第二索引中的排名,如表3所示。从表3中可以看出,用户c本次打擂台的战力96在第二索引中排名为2,用户e本次打擂台的战力97在第二索引中排名为1。同样,第二索引中,对于没有对应用户的第三结果数据的排名,与比上述第三结果数据低且有对应用户的最接近的结果数据的排名相同,例如表3中,战力100没有对应的用户,比战力100低且有对应用户的最接近的战力为97,97的排名为1,因此战力100的排名也为1,同理对于战力99~98,排名也为1。本实施例中,排名获得模块64根据用户本次使用上述应用程序的第二结果数据,第一索引和第二索引,即可获得上述用户在使用上述应用程序的所有用户中的排名,上述排名更新装置利用时间局部性,仅在第一缓冲区中对最近一段时间内使用上述应用程序的用户进行排名,从而实现了用户排名的快速更新,大大降低了实时更新排名的时间成本。图7为本申请排名更新装置另一个实施例的结构示意图,与图6所示的排名更新装置相比,不同之处在于,图7所示的排名更新装置中,排名获得模块64可以包括:排名查询子模块641、数量查询子模块642和排名计算子模块643;其中,排名查询子模块641,用于通过第三索引查询获得第二结果数据在使用上述应用程序的所有用户的结果数据中的排名;这里的使用上述应用程序的所有用户的结果数据为在用户本次使用上述应用程序之前,使用上述应用程序的所有用户的结果数据;其中,上述第三索引记录使用上述应用程序的所有用户的结果数据和对应的在第三索引中的排名。仍以游戏的打擂台活动为例,根据表1中保存的参加过打擂台活动的用户的战力和排名生成的第三索引,可以如表4所示。同样在第三索引中,对于没有对应用户的第三结果数据的排名,与比上述第三结果数据低且有对应用户的最接近的结果数据的排名相同。例如表4中,战力99没有对应的用户,比战力99低且有对应用户的最接近的战力为95,95的排名为2,因此战力99的排名也为2,同理对于战力98~96,排名也为2。对于用户c来说,上述第二结果数据即为用户c本次打擂台的战力96,排名查询子模块641通过查询表4所示的第三索引,可以获得战力96,在用户c打擂台之前参加过打擂台活动的所有用户的战力中,排名为2。对于用户e来说,上述第二结果数据即为用户e本次打擂台的战力97,排名查询子模块641通过查询表4所示的第三索引,可以获得战力97,在用户e打擂台之前参加过打擂台活动的所有用户的战力中,排名为2。数量查询子模块642,用于通过第一索引查询获得第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之前的结果数据比第二结果数据高的用户的数量;以及通过第二索引查询获得上述第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之后的结果数据比上述第二结果数据高的用户的数量;仍以游戏的打擂台活动为例,数量查询子模块642通过查询表2所示的第一索引,可以获得用户c本次打擂台的战力96的排名为1,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之前的战力比用户c打擂台之后的战力高的用户的数量为0;同理,数量查询子模块642通过查询表2所示的第一索引,可以获得用户e本次打擂台的战力97的排名为1,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之前的战力比用户e打擂台之后的战力高的用户的数量为0。进一步地,数量查询子模块642通过查询表3所示的第二索引,可以获得用户c本次打擂台的战力96的排名为2,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之后的战力比用户c打擂台之后的战力高的用户的数量为1;同理,数量查询子模块642通过查询表3所示的第二索引,可以获得用户e本次打擂台的战力97的排名为1,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之后的战力比用户e打擂台之后的战力高的用户的数量为0。排名计算子模块643,用于将排名查询子模块641通过第三索引查询获得的排名减去数量查询子模块642通过第一索引查询获得的用户的数量,所得的差值再加上数量查询子模块642通过第二索引查询获得的用户的数量,所得的和值为上述用户在使用上述应用程序的所有用户中的排名。仍以游戏的打擂台活动为例,对于用户c来说,排名计算子模块643计算获得的用户c在本次打擂台之后在参加打擂台的所有用户中的排名为:2-0+1=3;而对于用户e来说,排名计算子模块643计算获得的用户e在本次打擂台之后在参加打擂台的所有用户中的排名为:2-0+0=2。本实施例中,排名获得模块64,还用于在获得上述第一结果数据在第一索引中的排名之后,根据第一结果数据、第一索引和第二索引,获得上述用户本次使用上述应用程序之前在使用上述应用程序的所有用户中的排名。也就是说,在用户打开上述应用程序的界面之后,本次使用上述应用程序之前,排名获得模块64可以根据用户前次使用上述应用程序的第一结果数据,第一缓冲区中保存的第一索引和第二索引,获得上述用户本次使用上述应用程序之前在使用上述应用程序的所有用户中的排名。这时,排名获得模块64同样可以包括:排名查询子模块641、数量查询子模块642和排名计算子模块643;其中,排名查询子模块641,用于通过第三索引查询获得上述第一结果数据在使用上述应用程序的所有用户的结果数据中的排名;仍以游戏的打擂台活动为例,这里假设用户d在打擂台之前想查询一下自身当前的排名,参见表1,用户d前次打擂台的战力为93,排名查询子模块641通过查询表4所示的第三索引,可以获得战力93在所有用户的战力中的排名为4。数量查询子模块642,用于通过第一索引查询获得上述第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之前的结果数据比第一结果数据高的用户的数量;以及通过第二索引查询获得上述第一缓冲区中保存的,使用上述应用程序并且在使用上述应用程序之后的结果数据比第一结果数据高的用户的数量;仍以游戏的打擂台活动为例,数量查询子模块642通过查询表2所示的第一索引,可以获得用户d前次打擂台的战力93的排名为2,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之前的战力比用户d打擂台之前的战力高的用户的数量为1。进一步地,数量查询子模块642通过查询表3所示的第二索引,可以获得用户d前次打擂台的战力93的排名为3,这说明上述第一缓冲区中保存的,打擂台并且在打擂台之后的战力比用户d打擂台之前的战力高的用户的数量为2。排名计算子模块643,用于将排名查询子模块641通过第三索引查询获得的排名减去通过第一索引查询获得的用户的数量,所得的差值再加上数量查询子模块642通过第二索引查询获得的用户的数量,所得的和值为上述用户本次使用上述应用程序之前在使用上述应用程序的所有用户中的排名。具体地,对于用户d来说,排名计算子模块643计算获得的用户d在本次打擂台之前在参加打擂台的所有用户中的排名为:4-1+2=5。本实施例中,同样是在第一缓冲区中,排名获得模块64根据用户前次使用应用程序的第一结果数据,第一缓冲区中保存的第一索引和第二索引,即可获得上述用户在本次使用应用程序之前在使用上述应用程序的所有用户中的排名,实现了利用时间局部性对用户排名进行快速更新,由于第一缓冲区中保存的用户数量很少,因此即使频繁更新排名,时间成本也很低,大大降低了实时更新排名的时间成本。进一步地,上述排名更新装置还可以包括:清空模块65;排名获得模块64,还用于在保存模块63将用户本次使用上述应用程序的第二结果数据保存到第一缓冲区之后,当第一缓冲区中的用户的数量达到预定阈值时,将上述第二结果数据与第三索引记录的结果数据进行比对,获得上述第二结果数据在第三索引中的排名,作为上述用户在使用上述应用程序的所有用户中的排名;其中,第三索引记录使用上述应用程序的所有用户的结果数据和对应的在第三索引中的排名;本实施例中,如果上述第一缓冲区中的用户的数量达到预定阈值,那么在上述用户使用上述应用程序完毕之后,排名获得模块64就不能在第一缓冲区中对用户进行排名了,需要调用第二缓冲区进行排名,即将上述用户本次使用应用程序的第二结果数据在使用上述应用程序的所有用户的结果数据中进行排名,获得上述第二结果数据在第三索引中的排名,以实现对第三索引的更新。清空模块65,用于清空第一索引、第二索引和第一缓冲区。具体地,一旦第一缓冲区中的用户的数量达到预定阈值,排名获得模块64调用第二缓冲区进行排名,将上述第二结果数据在使用上述应用程序的所有用户的结果数据中进行排名,获得上述第二结果数据在第三索引中的排名,以实现对第三索引的更新之后,清空模块65需要清空第一索引和第二索引,以及第一缓冲区。本申请实施例提供的排名更新装置,利用用户排名变动的时间局部性原理,考虑到大多时候只有使用应用程序的少数用户的排名频繁变动,因此本申请在第一缓冲区维护最近排名发生更新的用户,并将缓冲区分为两层,第一缓冲区只对使用应用程序的用户进行排名;第二缓冲区对使用上述应用程序的所有用户进行排名,两层都使用索引进行排序,记录每个结果数据的排名。因为更多情况下是最近刚更新排名的用户导致使用应用程序的用户的排名发生变动,所以,大多时候只需调用第一缓冲区进行排序即可实现用户排名的快速更新,只有当第一缓冲区中的用户的数量达到预定阈值时,才会启动底层排名。以游戏的打擂台活动为例,因为同时在线的用户占全服务器注册用户的比例很小,而同时在线的用户中参加打擂台活动的比例又很小,所以第一缓冲区中保存的用户数量m很小,此时第一缓冲区可采用索引记录每个战力的排名,查询时间成本为o(1),更新时间成本为o(m);而当m达到预定阈值,此时需要将第一缓冲区中保存的用户和底层保存的所有未参加打擂台活动的用户进行排名更新,更新时间成本为o(n),并清空第一缓冲区中的用户,其中n为第一缓冲区中保存的用户和第二缓冲区保存的所有未参加打擂台活动的用户的总数,本申请能保证第一缓冲区中的用户数量始终很少,从而查询排名和更新排名的时间成本很低,另外由于第二缓冲区对所有用户排名的频率低,采用索引排序也足以应对压力。图8为本申请计算机设备一个实施例的结构示意图,本实施例中的计算机设备可以作为服务器或者服务器的一部分,实现本申请图1~图5所示实施例提供的排名更新方法。上述排名更新装置可以包括:一个或多个处理器;存储器,用于存储一个或多个程序;当一个或多个程序被一个或多个处理器执行时,使得所述一个或多个处理器实现本申请提供的排名更新方法。图8示出了适于用来实现本申请实施方式的示例性计算机设备的框图。图8显示的计算机设备12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。如图8所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(industrystandardarchitecture;以下简称:isa)总线,微通道体系结构(microchannelarchitecture;以下简称:mac)总线,增强型isa总线、视频电子标准协会(videoelectronicsstandardsassociation;以下简称:vesa)局域总线以及外围组件互连(peripheralcomponentinterconnection;以下简称:pci)总线。计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(randomaccessmemory;以下简称:ram)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图8未显示,通常称为“硬盘驱动器”)。尽管图8中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(compactdiscreadonlymemory;以下简称:cd-rom)、数字多功能只读光盘(digitalvideodiscreadonlymemory;以下简称:dvd-rom)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本申请所描述的实施例中的功能和/或方法。计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(localareanetwork;以下简称:lan),广域网(wideareanetwork;以下简称:wan)和/或公共网络,例如因特网)通信。如图8所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图8中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本申请图1~图5所示实施例提供的排名更新方法。本实施例还提供一种非临时性计算机可读存储介质,当上述存储介质中的计算机可执行指令在由计算机处理器执行时,用于执行本申请图1~图5所示实施例提供的排名更新方法。上述非临时性计算机可读存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(readonlymemory;以下简称:rom)、可擦式可编程只读存储器(erasableprogrammablereadonlymemory;以下简称:eprom)或闪存、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(localareanetwork;以下简称:lan)或广域网(wideareanetwork;以下简称:wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属
技术领域
的技术人员所理解。应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(programmablegatearray;以下简称:pga),现场可编程门阵列(fieldprogrammablegatearray;以下简称:fpga)等。本
技术领域
的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。此外,本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1