基于活动的fas是一种很好的方式

2024-06-01 02:50:20 发布

您现在位置:Python中文网/ 问答频道 /正文

需要一种方法来提高我网站基于SQL的活动提要的性能。我们在Heroku上使用Django。在

现在我们使用的是actstream,这是一个Django应用程序,它使用Django ORM中的通用外键实现活动提要。基本上,每个操作都有其actor和它可能作用的任何对象的通用外键,如下所示:

行动: (克莱-演员)在(Andrew's review of Starbucks-target上写了一篇(评论-动作对象

随着我们的扩展,它变得太慢了,这是可以理解的,因为它依赖于大的、昂贵的SQL连接。在

我认为至少有两种选择:

  1. 在SQL数据库上放置一个Redis层,然后从那里获取活动提要。在
  2. 试着绕过Django ORM,用原始SQL执行所有查询,我知道这样可以提高性能。在

任何人对这两个或其他想法有什么想法,我很乐意听听。在


Tags: 对象django方法应用程序sqlheroku网站orm
3条回答

您可能需要查看物化视图。由于您使用的是Heroku,而且它通常使用PostgreSQL,所以可以查看Materialized View Support for PostgreSQL。它不像其他数据库服务器那样成熟,但据我所知,它可以正常工作。“如果您不需要使用Django来创建一个新的feed,那么可能需要使用Django来创建一个新的feed”。手动管理视图是一个需要考虑的因素,所以在您执行之前请仔细研究它。在

希望这有帮助!在

采用了一种结合了这两种建议的方法。在

我们创建了一个数据库中每个操作的主列表,其中包含了我们需要的关于这些操作的所有信息,并将其保存在Redis中。给定一个action ID,我们现在可以对其进行Redis查找,并获得一个dictionary对象,该对象可以返回到前端。在

我们还创建了对应于用户可用的所有不同类型活动流的操作id列表。因此,给定一个用户id,我们就可以查询到他的朋友的活动、他自己的活动、最喜欢的地方活动等。(我想这些与物化视图有些对应,尽管它们在Redis中,而不是在PSQL中)

所以我们得到一个用户的feed作为一个action id的列表。然后我们通过在主操作列表中查找id来获得这些操作的详细信息。然后我们把饲料送回前端。在

谢谢你的建议,伙计们。在

你说雷迪斯?有了redis一切都会好起来。在

缓存是软件开发中最好的思想之一,如果你使用物化视图,你也应该考虑尝试缓存那些,相信我,你的用户会注意到差异的。在

相关问题 更多 >