我们在Django中有一个非常大的应用程序,它使用Postgres数据库。我们想要构建一个分析模块。
此模块使用基本查询,例如
someFoo = SomeFoo.objects.all() # Around 100000 objects returned.
然后切片并切块此数据。即
someFoo.objects.filter(Q(creator=owner) | Q(moderated=False))
这些查询将非常激烈,因为这将是一个分析和报告仪表板,quires将非常严重地打击数据库。
在这种情况下处理复杂查询的最佳方法是什么?即,当您有一个基本查询时,它将在短时间内经常切片和切块,永远不会再次使用。
我们拥有的一些可能的解决方案是
编辑:例如查询
select sport."sportName", sport.id, pop.name, analytics_query.loc_id, "new count"
from "SomeFoo_sportpop" as sportpop join "SomeFoo_pop" as pop on (sportpop.pop_id=pop.id) join "SomeFoo_sport" as sport on (sportpop.sport_id=sport.id) join
(select ref.catcher_pop_id as loc_id,
(select count(*) from "SomeFoo_pref" where catcher_pop_id=ref.catcher_pop_id and status='pending' and exists=True) as "new count"
from "SomeFoo_pref" as ref
where ref.exists=TRUE and ref.catcher_pop_id is not NULL
group by ref.catcher_pop_id) as analytics_query on (sportpop.pop_id=analytics_query.loc_id)
order by sport."sportName", pop.name asc
这是我们计划制作的原始SQL查询的一个示例,它将包含很多where语句和groupby。基本上我们会对基本查询进行切片和切块。
您可以指出我们是否有任何其他可能的解决方案或方法。任何帮助都非常感谢。
答案 0 :(得分:1)
我可以想到准备好的陈述和更快的服务器,可能在linux上......