排名更新方法及装置转让专利

申请号 : CN201610098421.1

文献号 : CN105787011B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘晗

申请人 : 网易(杭州)网络有限公司

摘要 :

本发明公开了一种排名更新方法和装置。所述排名更新方法包括:接收客户端发送的排名更新请求;所述排名更新请求包括待更新的第一名次和第二名次;从排名表中获取所述第一名次及其所对应的第一用户信息和所述第二名次及其所对应的第二用户信息,并保存在事务数据表中;对所述排名表中的所述第一名次所对应的第一用户信息和所述第二名次所对应的第二用户信息进行交换;当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次所对应的用户信息和所述第二名次所对应的用户信息。采用本发明实施例,能够避免排名的重复和混乱,保证排名更新的原子性和可靠性。

权利要求 :

1.一种排名更新方法,其特征在于,包括:

接收客户端发送的排名更新请求;所述排名更新请求包括待更新的第一名次和第二名次;

从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中;

对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换;

当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息。

2.如权利要求1所述的排名更新方法,其特征在于,所述排名更新请求还包括所述第一名次对应的第一用户数据和所述第二名次对应的第二用户数据;

所述从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中,具体包括:从所述排名表中获取所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息;

将所述第一用户数据与所述第一用户信息进行对比,并将所述第二用户数据与所述第二用户信息进行对比;

在所述第一用户数据与所述第一用户信息都对应于同一用户,且所述第二用户数据与所述第二用户信息也都对应于同一用户时,将所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息保存在所述事务数据表中。

3.如权利要求1所述的排名更新方法,其特征在于,所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,具体包括:当检测到所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息中的至少一个替换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,使所述第一名次仍对应所述第一用户信息,且使所述第二名次仍对应所述第二用户信息。

4.如权利要求1所述的排名更新方法,其特征在于,在所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息之后,还包括:删除所述事务数据表中所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息。

5.如权利要求1至4任一项所述的排名更新方法,其特征在于,在所述对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换之前,还包括:对所述排名表中的所述第一名次及其对应的第一用户信息进行加锁处理;

对所述排名表中的所述第二名次及其对应的第二用户信息进行加锁处理。

6.如权利要求5所述的排名更新方法,其特征在于,在所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息之后,还包括:对所述排名表中的所述第一名次及其对应的第一用户信息进行解锁处理;

对所述排名表中的所述第二名次及其对应的第二用户信息进行解锁处理。

7.一种排名更新装置,其特征在于,包括:

更新请求接收模块,用于接收客户端发送的排名更新请求;所述排名更新请求包括待更新的第一名次和第二名次;

数据保存模块,用于从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中用户信息交换模块,用于对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换;以及,用户信息回滚模块,用于当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息。

8.如权利要求7所述的排名更新装置,其特征在于,所述排名更新请求还包括所述第一名次对应的第一用户数据和所述第二名次对应的第二用户数据;

所述数据保存模块具体包括:

用户信息获取单元,用于从所述排名表中获取所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息;

用户信息对比单元,用于将所述第一用户数据与所述第一用户信息进行对比,并将所述第二用户数据与所述第二用户信息进行对比;以及,数据保存单元,用于在所述第一用户数据与所述第一用户信息都对应于同一用户,且所述第二用户数据与所述第二用户信息也都对应于同一用户时,将所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息保存在所述事务数据表中。

9.如权利要求7所述的排名更新装置,其特征在于,所述用户信息回滚模块具体用于当所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息中的至少一个替换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,使所述第一名次仍对应所述第一用户信息,且使所述第二名次仍对应所述第二用户信息。

10.如权利要求7所述的排名更新装置,其特征在于,所述排名更新装置还包括:数据删除模块,用于删除所述事务数据表中所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息。

11.如权利要求7至10任一项所述的排名更新装置,其特征在于,所述排名更新装置还包括:第一加锁模块,用于对所述排名表中的所述第一名次及其对应的第一用户信息进行加锁处理;以及,第二加锁模块,用于对所述排名表中的所述第二名次及其对应的第二用户信息进行加锁处理。

12.如权利要求11所述的排名更新装置,其特征在于,所述排名更新装置还包括:第一解锁模块,用于对所述排名表中的所述第一名次及其对应的第一用户信息进行解锁处理;以及,第二解锁模块,用于对所述排名表中的所述第二名次及其对应的第二用户信息进行解锁处理。

说明书 :

排名更新方法及装置

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种排名更新方法和装置。

背景技术

[0002] 在现有技术中,对数据库中的排行榜进行更新的操作通常采用内存交换更新和数据库交换更新两种形式。其中,内存交换更新的做法是直接替换内存中两个玩家的排名信息。内存交换在实现上比较简单,但是需要在进程内存中维护整个排行榜数据表,并定时写回数据库,该方式仅适用于规模比较小的排行榜,当排行榜内玩家数量过大时,该方法将消耗大量内存,同时整个排行榜存在于某一个进程中,玩家访问排行榜的时候都要访问这个进程,容易产生单点故障。根据实际的压力测试,当排行榜中玩家的数量达到200000以上,或并发访问频率达到100次/秒的时候,进程占用的CPU会出现明显的飙升,同时整个排行榜在定时写回数据库的时候,由于数据量过大,也会造成数据库的卡顿。而数据库交换更新的做法是使用事务来操作这两个排名的数据,以保证这两个数据在操作的过程中不会受到其他操作的影响而发生改变,其可扩展性相对于内存交换更强。

发明内容

[0003] 由于mongo数据库本身并不支持事务的特性,采用mongo数据库进行交换更新时,如果对两条数据分别进行操作,则有可能在操作完一条数据的时候,另一条数据已经发生了变化,或者在操作完一条数据的时候,游戏进程意外终止,使另一条数据的操作未完成,从而导致数据库中的数据不一致,使排行榜中的排名出现重叠和混乱。
[0004] 本发明实施例提出一种排名更新方法和装置,能够避免排名的重复和混乱,保证排名更新的原子性和可靠性。
[0005] 本发明实施例提供的一种排名更新方法,具体包括:
[0006] 接收客户端发送的排名更新请求;所述排名更新请求包括待更新的第一名次和第二名次;
[0007] 从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中;
[0008] 对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换;
[0009] 当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息。
[0010] 进一步地,所述排名更新请求还包括所述第一名次对应的第一用户数据和所述第二名次对应的第二用户数据;
[0011] 所述从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中,具体包括:
[0012] 从所述排名表中获取所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息;
[0013] 将所述第一用户数据与所述第一用户信息进行对比,并将所述第二用户数据与所述第二用户信息进行对比;
[0014] 在所述第一用户数据与所述第一用户信息都对应于同一用户,且所述第二用户数据与所述第二用户信息也都对应于同一用户时,将所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息保存在所述事务数据表中。
[0015] 进一步地,所述对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换,具体包括:
[0016] 将所述排名表中的所述第一名次对应的第一用户信息替换为所述第二用户信息;
[0017] 将所述排名表中的所述第二名次对应的第二用户信息替换为所述第一用户信息。
[0018] 进一步地,所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,具体包括:
[0019] 当检测到所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息中的至少一个替换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,使所述第一名次仍对应所述第一用户信息,且使所述第二名次仍对应所述第二用户信息。
[0020] 进一步地,在所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息之后,还包括:
[0021] 删除所述事务数据表中所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息。
[0022] 进一步地,在所述对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换之前,还包括:
[0023] 对所述排名表中的所述第一名次及其对应的第一用户信息进行加锁处理;
[0024] 对所述排名表中的所述第二名次及其对应的第二用户信息进行加锁处理。
[0025] 进一步地,在所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息之后,还包括:
[0026] 对所述排名表中的所述第一名次及其对应的第一用户信息进行解锁处理;
[0027] 对所述排名表中的所述第二名次及其对应的第二用户信息进行解锁处理。
[0028] 相应地,本发明实施例还提供了一种排名更新装置,具体包括:
[0029] 更新请求接收模块,用于接收客户端发送的排名更新请求;所述排名更新请求包括待更新的第一名次和第二名次;
[0030] 数据保存模块,用于从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中
[0031] 用户信息交换模块,用于对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换;以及,
[0032] 用户信息回滚模块,用于当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息。
[0033] 进一步地,所述排名更新请求还包括所述第一名次对应的第一用户数据和所述第二名次对应的第二用户数据;
[0034] 所述数据保存模块具体包括:
[0035] 用户信息获取单元,用于从所述排名表中获取所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息;
[0036] 用户信息对比单元,用于将所述第一用户数据与所述第一用户信息进行对比,并将所述第二用户数据与所述第二用户信息进行对比;以及,
[0037] 数据保存单元,用于在所述第一用户数据与所述第一用户信息都对应于同一用户,且所述第二用户数据与所述第二用户信息也都对应于同一用户时,将所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息保存在所述事务数据表中。
[0038] 进一步地,所述用户信息交换模块具体包括:
[0039] 第一替换单元,用于将所述排名表中的所述第一名次对应的第一用户信息替换为所述第二用户信息;以及,
[0040] 第二替换单元,用于将所述排名表中的所述第二名次对应的第二用户信息替换为所述第一用户信息。
[0041] 进一步地,所述用户信息回滚模块具体用于当所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息中的至少一个替换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,使所述第一名次仍对应所述第一用户信息,且使所述第二名次仍对应所述第二用户信息。
[0042] 进一步地,所述排名更新装置还包括:
[0043] 数据删除模块,用于删除所述事务数据表中所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息。
[0044] 进一步地,所述排名更新装置还包括:
[0045] 第一加锁模块,用于对所述排名表中的所述第一名次及其对应的第一用户信息进行加锁处理;以及,
[0046] 第二加锁模块,用于对所述排名表中的所述第二名次及其对应的第二用户信息进行加锁处理。
[0047] 进一步地,所述排名更新装置还包括:
[0048] 第一解锁模块,用于对所述排名表中的所述第一名次及其对应的第一用户信息进行解锁处理;以及,
[0049] 第二解锁模块,用于对所述排名表中的所述第二名次及其对应的第二用户信息进行解锁处理。
[0050] 实施本发明实施例,具有如下有益效果:
[0051] 本发明实施例提供的排名更新方法及装置,能够通过在事务数据表中记录交换更新操作相关的名次数据,在交换更新操作出现错误时,可以借助事务数据表对已经发生变化的名次数据进行回滚,从而将名次数据恢复成交换更新操作开始前的状态,保证数据库中数据的一致,从而避免了排名表中的排名出现重复和混乱,保证排名更新的原子性和可靠性。另外,通过对需要进行交换更新操作的排名数据进行加锁处理,使这些排名数据不会被其他进程操作,保证排名更新的稳定性和隔离性。

附图说明

[0052] 图1是本发明提供的排名更新方法的一个实施例的流程示意图;
[0053] 图2是本发明提供的排名更新装置的一个实施例的结构示意图。

具体实施方式

[0054] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0055] 参见图1,是本发明提供的排名更新方法的一个实施例的流程示意图,包括步骤S11至S14,具体如下:
[0056] S11:接收客户端发送的排名更新请求;所述排名更新请求包括待更新的第一名次和第二名次;
[0057] S12:从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中;
[0058] S13:对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换;
[0059] S14:当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息。
[0060] 需要说明的是,排名表保存在mongo数据库中,为各个名次及其用户信息的对应关系表。事务数据表用于记录未完成的交换更新操作,包含各个交换更新操作的唯一识别码和在该交换更新操作中需要进行交换的两个名次及其分别所对应的用户信息。
[0061] 当第一用户和第二用户的排名需要进行交换更新时,接收客户端发送的排名更新请求,该排名更新请求中包括需要进行交换的两个名次,即第一名次和第二名次。在接收该排名更新请求后,根据其中的第一名次和第二名次从位于mongo数据库的排名表中获取第一名次对应的第一用户信息和第二名次对应的第二用户信息,并将第一名次、第一用户信息、第二名次和第二用户信息相对应地保存在事务数据表中,同时在事务数据表中生成本次交换更新操作的唯一识别码,以区分不同事务。然后,交换排名表中第一名次和第二名次中的用户信息进行更新,使第一名次所对应的用户信息为第二用户信息,第二名次所对应的用户信息为第一用户信息。
[0062] 但是,在第一名次和第二名次对应的用户信息交换失败时,需对本次交换操作进行回滚,将第一名次和第二名次的对应关系回滚为事务数据表中的对应关系,即使第一名次对应第一用户信息,且使第二名次对应第二用户信息。其中,若第一名次对应的用户信息交换为第二用户信息,而第二名次对应的用户信息仍为第二用户信息,则从事务数据表中获取第一名次对应的第一用户信息,并回滚排名表中第一名次对应的用户信息,使第一名次对应的用户信息为第一用户信息;若第二名次对应的用户信息交换为第一用户信息,而第一名次对应的用户信息仍为第一用户信息,则从事务数据表中获取第二名次对应的第二用户信息,并回滚排名表中第二名次对应的用户信息,使第二名次对应的用户信息为第二用户信息。通过回滚操作将交换失败的名次数据恢复成交换更新操作开始前的状态,保证数据库中数据的一致,从而避免了排名表中的排名出现重复和混乱,提高排名更新的原子性和可靠性。
[0063] 进一步地,所述排名更新请求还包括所述第一名次对应的第一用户数据和所述第二名次对应的第二用户数据;
[0064] 所述从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中,具体包括:
[0065] 从所述排名表中获取所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息;
[0066] 将所述第一用户数据与所述第一用户信息进行对比,并将所述第二用户数据与所述第二用户信息进行对比;
[0067] 在所述第一用户数据与所述第一用户信息都对应于同一用户,且所述第二用户数据与所述第二用户信息也都对应于同一用户时,将所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息保存在所述事务数据表中。
[0068] 需要说明的是,当第一用户和第二用户的排名需要进行交换更新时,接收客户端发送的排名更新请求,排名更新请求包括第一名次、第一名次对应的第一用户数据、第二名次和第二名次对应的第二用户数据,其中,用户数据一般为用户识别码。根据排名更新请求检查位于mongo数据库的排名表中的第一名次所对应的第一用户信息是否为第一用户数据,以及第二名次所对应的第二用户信息是否为第二用户数据,即检测排名表中待更新的名次所对应的用户识别码是否为客户端发送过来的用户识别码。若是,则说明排名表还未更新,从排名表中获取第一名次、第一名次所对应的用户信息、第二名次和第二名次所对应的用户信息,并保存在事务数据表中,同时在事务数据表中生成本次更新操作的唯一的识别码;若不是,则说明排名表已经更新,不再进行后续更新操作。
[0069] 进一步地,所述对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换,具体包括:
[0070] 将所述排名表中的所述第一名次对应的第一用户信息替换为所述第二用户信息;
[0071] 将所述排名表中的所述第二名次对应的第二用户信息替换为所述第一用户信息。
[0072] 需要说明的是,在对排名表中的第一名次和第二名次所对应的用户信息进行交换时,首先将第一名次及其所对应的第一用户信息和第二名次及其所对应的第二用户信息读取到内存中,并在内存中删除其中的第一名次和第二名次。随后,将内存中的第一用户信息写入排名表的第二名次中,使第二名次所对应的用户信息替换为第一用户信息,并将内存中的第二用户信息写入排名表的第一名次中,使第一名次所对应的用户信息替换为第二用户信息。
[0073] 进一步地,所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,具体包括:
[0074] 当检测到所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息中的至少一个替换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,使所述第一名次仍对应所述第一用户信息,且使所述第二名次仍对应所述第二用户信息。
[0075] 需要说明的是,在进行交换后,对该交换操作进行检测,若检测到交换成功,则说明本次交换更新成功,若检测到交换失败,则需对本次交换操作进行回滚。其中,若替换第一名次所对应的用户信息成功,而替换第二名次所对应的用户信息失败,则从事务数据表中获取第一用户的信息并根据该信息替换第一名次中的用户信息,使第一名次中的用户信息为第一用户信息;若替换第一名次所对应的用户信息失败,而替换第二名次所对应的用户信息成功,则从事务数据表中获取第二用户的信息并根据该信息替换第二名次中的用户信息,使第二名次中的用户信息为第二用户信息;若替换第一名次所对应的用户信息和替换第二名次所对应的用户信息均失败,则第一名次和第二名次对应的用户信息与事务数据表中的相一致,无需再次回滚,可直接进行后续操作。
[0076] 进一步地,在所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息之后,还包括:
[0077] 删除所述事务数据表中所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息。
[0078] 需要说明的是,在本次交换更新操作完成后,需删除事务数据表中本次交换更新操作的相关数据。
[0079] 进一步地,在所述对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换之前,还包括:
[0080] 对所述排名表中的所述第一名次及其对应的第一用户信息进行加锁处理;
[0081] 对所述排名表中的所述第二名次及其对应的第二用户信息进行加锁处理。
[0082] 需要说明的是,在对排名表中的第一名次和第二名次所对应的用户信息进行交换之前,为了防止正在操作的第一名次及其对应的数据和第二名次及其对应的数据被其他进程操作,对第一名次及其所对应的用户信息和第二名次及其所对应的用户信息进行加锁操作。该加锁操作通过对表中相应的数据设置一个字段的方式来实现。具体地,在排名表中的第一名次及其所对应的用户信息和第二名次及其所对应的用户信息所在的行中增加加锁属性,并将该加锁属性赋值为本次更新操作在事务数据表中的唯一识别码。该加锁操作具有排他性,同一个名次数据在同一时刻只能被加一次锁。
[0083] 在加锁操作后,对该加锁操作进行检测,若检测到第一名次及其所对应的用户信息和第二名次及其所对应的用户信息的加锁操作中有一个失败,则对已加锁的数据进行解锁操作,且不再执行本次更新操作。通过对第一名次和其所对应的用户信息和第二名次和其所对应的用户信息进行加锁处理,使第一名次和其所对应的用户信息和第二名次和其所对应的用户信息不会被其他进程操作,从而保证了更新过程数据的正确性。
[0084] 进一步地,在所述当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息之后,还包括:
[0085] 对所述排名表中的所述第一名次及其对应的第一用户信息进行解锁处理;
[0086] 对所述排名表中的所述第二名次及其对应的第二用户信息进行解锁处理。
[0087] 需要说明的是,在对第一名次对应的用户信息和第二名次对应的用户信息进行交换更新操作后,需对第一名次及其所对应的用户信息和第二名次及其所对应的用户信息进行解锁操作,删除排名表中的第一名次及其所对应的用户信息和第二名次及其所对应的用户信息所在的行中的锁属性,并且删除本次更新操作在事务数据表中的记录。
[0088] 本发明实施例提供的排名更新方法,能够通过在事务数据表中记录交换更新操作相关的名次数据,在交换更新操作出现错误时,可以借助事务数据表对已经发生变化的名次数据进行回滚,从而将名次数据恢复成交换更新操作开始前的状态,保证数据库中数据的一致,从而避免了排名表中的排名出现重复和混乱,保证排名更新的原子性和可靠性。另外,通过对需要进行交换更新操作的排名数据进行加锁处理,使这些排名数据不会被其他进程操作,保证排名更新的稳定性和隔离性。
[0089] 相应地,本发明还提供一种排名更新装置,能够实现上述实施例中的排名更新方法的所有流程。
[0090] 参见图2,是本发明提供的排名更新装置的一个实施例的结构示意图,具体如下:
[0091] 更新请求接收模块21,用于接收客户端发送的排名更新请求;所述排名更新请求包括待更新的第一名次和第二名次;
[0092] 数据保存模块22,用于从排名表中获取所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息,并保存在事务数据表中
[0093] 用户信息交换模块23,用于对所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息进行交换;以及,
[0094] 用户信息回滚模块24,用于当检测到交换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息。
[0095] 进一步地,所述排名更新请求还包括所述第一名次对应的第一用户数据和所述第二名次对应的第二用户数据;
[0096] 所述数据保存模块具体包括:
[0097] 用户信息获取单元,用于从所述排名表中获取所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息;
[0098] 用户信息对比单元,用于将所述第一用户数据与所述第一用户信息进行对比,并将所述第二用户数据与所述第二用户信息进行对比;以及,
[0099] 数据保存单元,用于在所述第一用户数据与所述第一用户信息都对应于同一用户,且所述第二用户数据与所述第二用户信息也都对应于同一用户时,将所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息保存在所述事务数据表中。
[0100] 进一步地,所述用户信息交换模块具体包括:
[0101] 第一替换单元,用于将所述排名表中的所述第一名次对应的第一用户信息替换为所述第二用户信息;以及,
[0102] 第二替换单元,用于将所述排名表中的所述第二名次对应的第二用户信息替换为所述第一用户信息。
[0103] 进一步地,所述用户信息回滚模块具体用于当所述排名表中的所述第一名次对应的第一用户信息和所述第二名次对应的第二用户信息中的至少一个替换失败时,根据所述事务数据表回滚所述排名表中的所述第一名次对应的用户信息和所述第二名次对应的用户信息,使所述第一名次仍对应所述第一用户信息,且使所述第二名次仍对应所述第二用户信息。
[0104] 进一步地,所述排名更新装置还包括:
[0105] 数据删除模块,用于删除所述事务数据表中所述第一名次及其对应的第一用户信息和所述第二名次及其对应的第二用户信息。
[0106] 进一步地,所述排名更新装置还包括:
[0107] 第一加锁模块,用于对所述排名表中的所述第一名次及其对应的第一用户信息进行加锁处理;以及,
[0108] 第二加锁模块,用于对所述排名表中的所述第二名次及其对应的第二用户信息进行加锁处理。
[0109] 进一步地,所述排名更新装置还包括:
[0110] 第一解锁模块,用于对所述排名表中的所述第一名次及其对应的第一用户信息进行解锁处理;以及,
[0111] 第二解锁模块,用于对所述排名表中的所述第二名次及其对应的第二用户信息进行解锁处理。
[0112] 本发明实施例提供的排名更新装置,能够通过在事务数据表中记录交换更新操作相关的名次数据,在交换更新操作出现错误时,可以借助事务数据表对已经发生变化的名次数据进行回滚,从而将名次数据恢复成交换更新操作开始前的状态,保证数据库中数据的一致,从而避免了排名表中的排名出现重复和混乱,保证排名更新的原子性和可靠性。另外,通过对需要进行交换更新操作的排名数据进行加锁处理,使这些排名数据不会被其他进程操作,保证排名更新的稳定性和隔离性。
[0113] 以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。