我有一个关于制作“高分榜”的问题。
假设我有一个拥有 1.000.000 活跃用户的在线游戏。每个用户都有从 0 到 X 的分数。现在,我想显示一个排名列表。在一页中显示所有百万条目是很疯狂的,因此它被分成 Y 页(每页 100 个条目 => 10.000 页)。
我不确定如何解决它。
1. 最简单的方法是加载所有 1m 条目
在一个 SELECT 中,获取结果并使用 for 循环查找当前用户并显示该特定页面。(但所有其他 999.900 条目将保存在 RAM 中,即使它没有显示出来)。对于页面更改,我可以只使用结果数据而无需第二次数据库调用。(所以我不在乎那段时间的点数变化)
SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points;
2.我的第二个想法是,单独加载每个页面,但我不知道
2.1 性能是否真的更好 2.2 如何获得正确的起始页,因为我只有用户的积分,而没有真正的他的位置
那么我该如何解决这个问题。我真的不知道mysql可以处理什么。更多的小电话比一个大电话更好吗?我什至可以保存大量结果数据吗?第二种解决方案会在每次页面更改时更新所有更改点,但我更关心性能,然后总是更新列表数据。
谢谢您的帮助!马库斯