Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 定期为列查找具有最大值的n行_Python_Mysql_Database - Fatal编程技术网

Python 定期为列查找具有最大值的n行

Python 定期为列查找具有最大值的n行,python,mysql,database,Python,Mysql,Database,我正在创建一个排行榜,并希望结果在客户端“近”实时更新 我的桌子是这样的: ╔════╦═════════════════╦════════════╦════════╗ ║ id ║ author ║topic ║ count ║ ╠════╬═════════════════╬════════════╬════════╣ ║ 1 ║ jazzgarza ║ nowplaying ║ 1 ║ ║ 2 ║ DJBure ║

我正在创建一个排行榜,并希望结果在客户端“近”实时更新

我的桌子是这样的:

╔════╦═════════════════╦════════════╦════════╗
║ 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查询,我会定期运行(每秒钟左右,针对每个主题)

但是我的表增长非常快(大约每秒增加7个用户),而且我的解决方案肯定无法正确扩展。 我尝试添加一个索引,但这可能只是一个快速修复,不会永远奏效n可能在3到50之间,我希望能够同时跟踪数百个主题

所以我的问题是,有什么更聪明的方法可以做到这一点


我对任何事情都持开放态度。我的解决方案不必是纯SQL,只要它可以在客户端之后检索

此查询从主题
wtf
获取前2个结果,从主题
nowplaying
获取前3个结果:

(SELECT * FROM member WHERE topic = 'wtf' ORDER BY count DESC LIMIT 3) UNION (SELECT * FROM member WHERE topic = 'nowplaying' ORDER BY count DESC LIMIT 3)

这是。

此查询从topic
wtf
获取前2个结果,从topic
nowplaying获取前3个结果:

(SELECT * FROM member WHERE topic = 'wtf' ORDER BY count DESC LIMIT 3) UNION (SELECT * FROM member WHERE topic = 'nowplaying' ORDER BY count DESC LIMIT 3)

这就是答案。

很难给出一刀切的答案

在SQL查询中添加和索引以及
limit
指令可能就足够了

如果您需要更大的可扩展性,那么解决方案可能是在不同的服务器上提供不同版本的DB,每个主题一个


如果你的数据库需要处理数十亿条记录,下一步就是使用这种NoSQL系统,但我想你不需要走那么远。

很难给出一个一刀切的答案

在SQL查询中添加和索引以及
limit
指令可能就足够了

如果您需要更大的可扩展性,那么解决方案可能是在不同的服务器上提供不同版本的DB,每个主题一个


下一步,如果你的数据库必须处理数十亿条记录,那就是使用这种NoSQL系统,但我想你不需要这么做。

为什么不添加一个基于内存的存储,比如一个按主题索引的地图,它给出了你的
n
顶级玩家列表(按计数排序)

如果内存不能包含所有数据,还可以实现缓存解决方案

该映射将在应用程序启动时填充,然后由应用程序的一个线程异步更新(因为您只需要接近实时)

这样,从客户端的角度来看,对它的访问将是固定时间的,并且刷新不会针对应用程序的每次点击进行,而是以指定的速率进行

希望有帮助


致以最诚挚的问候

您为什么不添加一个基于内存的存储,比如一个按主题索引的地图,它给出了您的
n
顶级玩家列表(按计数排序)

如果内存不能包含所有数据,还可以实现缓存解决方案

该映射将在应用程序启动时填充,然后由应用程序的一个线程异步更新(因为您只需要接近实时)

这样,从客户端的角度来看,对它的访问将是固定时间的,并且刷新不会针对应用程序的每次点击进行,而是以指定的速率进行

希望有帮助


致以最良好的祝愿

首先,我会在你的问题末尾加上一个限制n。我看不出你的解释中有n个数字?给定上述数据集,当n=2时,完整的结果集会是什么样子?因为它不是。我的n随后出现在python代码中,我将结果减少到n行。我不知道LIMIT关键字,这可能会有很大帮助。首先,我会在你的查询末尾添加一个LIMIT n,我看不出你的解释中n的数字在哪里?给定上述数据集,当n=2时,完整的结果集会是什么样子?因为它不是。我的n随后出现在python代码中,我将结果减少到n行。我不知道LIMIT关键字,它可能会帮助很多听起来很棒的东西。有了这个索引,我可以想象它可以毫无问题地工作很长时间。之后,我可以在python代码中解析结果。我要试一试,听起来棒极了。有了这个索引,我可以想象它可以毫无问题地工作很长时间。之后,我可以在python代码中解析结果。我要试试看它的答案。我实际上考虑过创建几个dbs,每个主题一个。但我在SQL连接方面受到很大限制,必须找到一种方法来解决这个问题。我也来看看:)谢谢你的回答。我实际上考虑过创建几个dbs,每个主题一个。但我在SQL连接方面受到很大限制,必须找到一种方法来解决这个问题。我也来看看:)