【发布时间】:2025-12-29 14:55:09
【问题描述】:
基本上我想为每个主机获取最新的 30 个日志条目。目前我正在 django-piston 中执行此操作。
def read(self,request):
val={}
for x in Host.objects.all():
val[x.uuid_id]=DataLog.objects.filter(host=x).order_by('-time')[:30]
return val
不幸的是,这个请求需要很长时间(目前大约 10k 数据库条目需要 1 秒)。 有没有更有效的方法来做到这一点?
哈珀
【问题讨论】:
-
这是一个常见问题,没有原始 SQL 的单一查询解决方案。查找“Top N GROUP BY”以查找有关 SQL 的帮助。当我的常见问题解答需要每个类别的前 N 个问题时,我首先编写原始 SQL,然后在代码更改后决定放弃这个想法并只缓存结果:)
-
如何将每个主机的最后 30 行保存在不同的表中(例如,LatestDataLog)?在创建数据记录时使用信号,将数据记录 ID 保存在 LatestDataLog 中并清除超过 30 行的主机记录。
-
我认为你的标题选错了。我想问“如何按类别获取前 N 个条目”
标签: python django django-queryset django-piston