需要一种方法来提高我网站基于SQL的活动提要的性能。我们在Heroku上使用Django。在
现在我们使用的是actstream,这是一个Django应用程序,它使用Django ORM中的通用外键实现活动提要。基本上,每个操作都有其actor和它可能作用的任何对象的通用外键,如下所示:
行动: (克莱-演员)在(Andrew's review of Starbucks-target上写了一篇(评论-动作对象)
随着我们的扩展,它变得太慢了,这是可以理解的,因为它依赖于大的、昂贵的SQL连接。在
我认为至少有两种选择:
任何人对这两个或其他想法有什么想法,我很乐意听听。在
您可能需要查看物化视图。由于您使用的是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一切都会好起来。在
缓存是软件开发中最好的思想之一,如果你使用物化视图,你也应该考虑尝试缓存那些,相信我,你的用户会注意到差异的。在
相关问题 更多 >
编程相关推荐