为了账号安全,请及时绑定邮箱和手机立即绑定

优化 Django 的 QuerySetSequences

优化 Django 的 QuerySetSequences

慕哥9229398 2021-06-07 02:50:28
在我的一个观点中,我遇到了问题,进入这个 url 会使 CPU 使用率 100% 持续 5-10 分钟。这意味着在接下来的 5-10 分钟内,我的网页无用。我敢打赌,这是因为我试图发送多少数据库查询。给我带来麻烦的 Views.py:def guild_details(request, guild_name):    fixed_guild_name = urllib.parse.unquote(guild_name)    players = Player.objects.filter(guild=fixed_guild_name)    last_month = datetime.today() - timedelta(days=30)    deaths = reduce(QuerySetSequence, [Deaths.objects.filter(killed=player, date__gte=last_month) for player in players])    kills = reduce(QuerySetSequence, [Deaths.objects.filter(killer=player, date__gte=last_month) for player in players])    return render(request, 'guild.html', {'players': players,                                          'deaths': deaths.order_by('-date'),                                          'kills': kills.order_by('-date'),                                          'guild_name': guild_name})看起来还不错,但请考虑:数据库包括超过 6000 多个“玩家”。(和上升)数据库包括超过 26000 多个“死亡”。(和上升)起初,我正在考虑为这个网页做缓存,但它的死亡/杀死可能每 30 分钟左右改变一次,所以我认为这不会有多大帮助 - 考虑到我第一次访问这个页面时遇到问题,如果玩家数量很高(10+)。如果玩家人数很少,我可以轻松访问此页面。另外,我正在同一台服务器上运行 redis / celery 并进行报废。有什么我可以优化的东西吗?或者我应该只是简单地将更多的 CPU 放入其中?我的“顶部”命令:    last pid: 69974;  load averages:  4.28,  4.78,  5.49                                                                                                    up 2+11:16:22  12:40:4614 processes:  5 running, 9 sleepingCPU: 33.1% user,  1.4% nice,  6.0% system,  0.0% interrupt, 59.4% idleMem: 8965M Active, 30G Inact, 112K Laundry, 82G Wired, 3594M FreeARC: 64G Total, 41G MFU, 19G MRU, 17M Anon, 857M Header, 2934M Other     55G Compressed, 97G Uncompressed, 1.76:1 RatioSwap:前 3 个是passenger_wsgi,它打开manage.py。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信