请教大佬,类似蚂蚁森林的能量排行,后端应该怎么设计?

2020-09-09 17:27:57 +08:00
 qwerthhusn

假设系统有 N 万个用户,每个用户都有一个 score 。这个 score 经常发生变化。

需要完成以下功能:

  1. 整个平台,score 最高的 N 个用户的信息
  2. 我的好友 score 排行榜
  3. 我的 score 在整个平台处于的位置

现在没有太好的思路,现在想的是

假设数据存在 MySQL 里面的

create table user (
    id bigint not null primary key,
    name varchar(255) not null,
    score int not null
);

create table user_relation (
   user1_id bigint not null,
   user2_id bigint not null,
   primary key(user1_id, user2_id)
);
6174 次点击
所在节点    程序员
43 条回复
yangyaofei
2020-09-10 15:02:43 +08:00
同意 #14 楼的思路 但是这个其实是存储 n * 10^4 区间中的个数,就可以接近实时的了,然后每次直接算每个区间的计数之和和对应的小区间的排名就好了.

记得最早看见这个问题还是好久之前迅雷算积分有离线下载的时候,大体意思就是算某个迅雷用户的积分的排名
limbo0
2020-09-10 17:46:47 +08:00
@wellsc 额,针对楼上说的数据量大的情况下算好友排名,更适合图数据库
wellsc
2020-09-11 10:26:27 +08:00
@limbo0 还是那个问题,图数据库是用来解决高并发还是复杂业务场景的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705551

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX