一种用户排名获得方法、装置及服务器的制造方法_3

文档序号:9750995阅读:来源:国知局
用户积分为999998分的有I人,用户积分为999999分的有I人等,则将[O,1000000,200000)作为积分二叉树的根节点,根节点的积分区间的长度为1000000,然后把根节点保存的积分区间平均分为两个积分区间[O ,500000 ,150000)和[500000,1000000,50000)保存在根节点的子节点中,依次类推,最终得到1000000个叶子节点保存的区间[O,I,2)、[ I,2,4)、……、[499000,499001,30)、……、[999998,9999999,I)、[999999,1000000,I),由此建立用户A所在区域的积分二叉树如图2所示。
[0098]S103:查找保存了所述第一积分所在积分区间的每个目标子节点。
[0099]由于保存所述第一积分所在积分区间的目标子节点有多个,因此,在已建立的积分二叉树中,查找保存了所述第一积分所在积分区间的每个目标子节点。
[0100]S104:根据所述排名基数、每个目标子节点在积分二叉树中的位置,及每个目标子节点中保存的用户的个数,计算出当前用户在所在区域的排名。
[0101]具体的,本步骤中找到保存所述第一积分所在积分区间的每个目标子节点,判断找到的每个目标子节点在积分二叉树中的位置,根据判断结果及当前用户的第一积分对应的排名基数累加找到的每个目标子节点中保存的用户的个数,计算出当前用户在所在区域的排名。
[0102]其中,步骤S104可以包括:
[0103]在所述积分二叉树的根节点的子节点中找到目标子节点,将找到的目标子节点确定为当前节点,判断当前节点是否为左子节点,如果是,则将右子节点包含的用户个数累加到所述排名基数上,将累加后得到的排名作为当前用户的排名,如果否,则将所述排名基数作为当前用户的排名,其中,每个非叶子节点有两个子节点,分别为左子节点和右子节点,所述左子节点为低分子节点,所述右子节点为高分子节点;
[0104]在当前节点的子节点中查找下一个目标子节点,将该找到的目标子节点确定为当前节点,判断当前节点是否为左子节点,如果是,则将右子节点包含的用户个数累加到所述当前用户的排名上,将累加后得到的排名作为当前用户的排名,如果否,则当前用户的排名不变,在当前节点的子节点中查找再下一个目标子节点,将该找到的再下一个目标子节点确定为当前节点,返回执行所述判断当前节点是否为左子节点的步骤;
[0105]在当前节点为叶子节点时,将当前用户的排名确定为用户在所在区域的排名。
[0106]具体的,由于左子节点为低分子节点,右子节点为高分子节点,如果在根节点的子节点中找到的目标子节点为左子节点,那么当前用户的排名在右子节点包含的用户个数之后,则将右子节点包含的用户个数累加到所述排名基数上,如果在除根节点的子节点以外的子节点中找到的目标子节点为左子节点,则将右子节点包含的用户个数累加到所述当前用户的排名上。
[0107]例如:当前用户A的积分为499000分,当前用户A对应的排名基数为0,首先,在图2所示的已建立的积分二叉树中,找到保存了积分区间为[0,500000,150000)的节点,该节点为左子节点,所以将右子节点包含的用户个数累加到O上,也就是当前用户A的排名为50000名,依次类推,继续遍历累加直到找到保存了 499000分的叶子节点[499000,499001,30),找到的节点约有20多个,即累加20多次,整个累加过程完成,得到当前用户A的排名。
[0108]由于积分二叉树树结构的体积实现起来相对较小,因此它存储的积分数据可以保存在内存中,以实现快速查询和修改。
[0109]在图1所示方法实施例基础上,如图3所示,本发明提供的另一种用户排名获得方法,应用于每个区域的服务器,该方法在图1所示的步骤S101-S104后还可以包括:
[0110]S301:定时统计服务器所在区域内积分处于各个积分区间内的用户个数,并根据统计结果更新服务器所在区域的积分二叉树。
[0111]由于每个区域内的用户个数是动态变化的,所以本实施例中定时统计服务器所在区域内积分处于各个积分区间内的用户个数,将新统计的用户个数及其积分存入其所在区域已建立的积分二叉树匹配的节点中,以保证排名的实时性。具体定时的时间,可以依据需要来设置,例如可以每天更新一次,或者每小时更新一次等等。
[0112]在当前用户的积分发生改变时,在已建立的积分二叉树中涉及修改的节点为所述当前用户的积分发生改变的积分区间所在的节点。
[0113]例如:当前用户A的积分由3分变到5分,当前用户A所在区域的积分二叉树涉及保存积分区间为[3,5]的节点。
[0114]当用户的积分发生变化时,每次所需要更新的节点数量是用户积分变化的log(n)级别,每次查询或更新的复杂度为积分最大值的0(log(n)),也就是说如果当前用户积分一次变化在百万级,那么更新的节点的数量在二十级别,与用户数量无关,因此,在海量用户下也可以快速完成查询并计算出当前用户的排名。
[0115]在图1所示方法实施例基础上,如图4所示,本发明提供的另一种用户排名获得方法,应用于每个区域的服务器,该方法在图1所示的步骤S101-S104后还可以包括:
[0116]S401:将当前用户及第一积分发送给所有区域的各个服务器。
[0117]为了获得当前用户在所有区域中的总排名,需要将当前用户及第一积分发送给除当前用户所在区域之外的所有区域的各个服务器。各个服务器根据接收到的当前用户及第一积分,遍历本区域所建立的积分二叉树,计算出接收到的当前用户在本区域的排名,并将计算出的排名发送给当前用户所在区域的服务器。当然,各个服务器也可以按照现有技术的方法根据接收到的当前用户及第一积分,获得当前用户在该区域的排名。
[0118]S402:接收各个服务器根据所述第一积分计算出的所述当前用户在各个区域的排名。
[0119]S403:将接收到的各个区域的排名累加。
[0120]S404:将累加后的排名减一作为当前用户在所有区域中的总排名。
[0121]例如:当前用户A在区域I,积分为1分,在区域I的排名为CI,将当前用户及积分1发送给区域I以外的其它区域,接收各个区域发送的排名,累加排名并减I即为当前用户A在所有区域中的总排名,如图5所示。
[0122]在接收其它区域发送的排名时,可以接受一定的区域间数据延迟,为了提高响应速度,可以在每个区域存储一份缓存数据,异步定期更新,这样在获取其他区域排名时,只要读取缓存而不是遍历各个区域的积分二叉树,可以提高一定的计算速度。
[0123]本发明实施例提供的一种用户排名获得方法,获得当前用户的第一积分,所述当前用户的第一积分对应一个排名基数,遍历已建立的积分二叉树,所述积分二叉树为当前用户所在区域的积分二叉树,所述积分二叉树的每个节点中保存了一个积分区间及积分处于该积分区间内的用户个数,查找保存了所述第一积分所在积分区间的每个目标子节点,根据所述排名基数、每个目标子节点在积分二叉树中的位置,及每个目标子节点中保存的用户的个数,计算出当前用户在所在区域的排名。本发明通过遍历累加积分二叉树中每个目标子节点中保存的用户个数获得各个用户的排名,由于累加次数较少且累加次数与用户量无关,达到减少数据计算量,减少系统资源占用的目的。
[0124]图6为本发明实施例提供的一种用户排名获得装置的结构示意图,与图1所示的方法相对应,图6所示装置可以包括:获得模块601、遍历模块602、查找模块603和计算模块604,
[0125]所述获得模块601,用于获得当前用户的第一积分,所述当前用户的第一积分对应一个排名基数;
[0126]服务器根据用户就近的原则存储数据,所述数据可以包括图片、短信或视频等。
[0127]在当用户对存储数据进行备份/还原操作时,当前用户所在区域的服务器将备份/还原操作对应的精简数据写入缓冲区。
[0128]当在缓冲区预设超时时间内,当前用户对存储数据没有进行备份/还原操作时,则将以上缓冲区的精简数据写入消息队列作为备份数据,等待服务器读取并进行下一步处理。
[0129]具体的,所述获得模块601,可以包括:第一获得子模块和第一计算子模,
[0130]所述第一获得子模块,用于获得当前用户的备份数据;
[0131]所述第一计算子模块,
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1