我正在创建一个排行榜,并希望结果在客户端“近”实时更新。
这是我的桌子的样子:
╔════╦═════════════════╦════════════╦════════╗
║ id ║ author ║topic ║ count ║
╠════╬═════════════════╬════════════╬════════╣
║ 1 ║ jazzgarza ║ nowplaying ║ 1 ║
║ 2 ║ DJBure ║ nowplaying ║ 16 ║
║ 3 ║ GRC__romoly ║ nowplaying ║ 5 ║
║ 4 ║ MarineBerteloot ║ wtf ║ 1 ║
║ 5 ║ Nick_Lukitsh ║ nowplaying ║ 1 ║
║ 6 ║ Mugen__ ║ nowplaying ║ 2 ║
║ 7 ║ MaxChebotarev ║ nowplaying ║ 6 ║
║ 8 ║ radeonvelcro ║ nowplaying ║ 9 ║
║ 9 ║ SF1033 ║ nowplaying ║ 102 ║
╚════╩═════════════════╩════════════╩════════╝
我基本上希望能够检索给定主题的计数最高的 n 行。我想对每个主题都这样做,并且n可能会根据主题而变化。
目前,我有一个简单的 SQL 查询,我会定期运行(每隔一秒左右,针对每个主题)。
SELECT * FROM member WHERE member.topic = 'wtf' ORDER BY member.count DESC
但是我的表增长得非常快(每秒增加 7 个用户),而且我的解决方案肯定不能正确扩展。我尝试添加索引,但这可能只是一个快速修复,不会永远成功。n可以在 3 到 50 之间,我希望能够同时跟踪数百个主题。
所以我的问题是,有什么更聪明的方法来做到这一点?
我对几乎任何事情都持开放态度。我的解决方案不必是纯 SQL,只要它可以在客户端之后检索。