需要一种方法来提高我网站基于 SQL 的事件源的性能。我们在 Heroku 上使用 Django。
现在我们正在使用 actstream,这是一个 Django 应用程序,它使用 Django ORM 中的通用外键实现事件提要。基本上,每个 Action 都有指向其参与者和它可能作用于的任何对象的通用外键,如下所示:
行动: (Clay - actor) 写了一篇 (comment - action object) (Andrew 对星巴克的评论 - 目标)
随着我们的扩展,它变得太慢了,这是可以理解的,因为它依赖于大型、昂贵的 SQL 连接。
我至少看到两个选项:
- 在 SQL 数据库之上放置一个 Redis 层,并从那里获取事件提要。
- 尝试绕过 Django ORM 并在原始 SQL 中执行所有查询,据我所知这可以提高性能。
任何人对这两个或其他想法有任何想法,我很想听听他们的意见。
最佳答案
您可能想看看物化 View 。由于您使用的是 Heroku,并且通常使用 PostgreSQL,因此您可以查看 Materialized View Support for PostgreSQL .它不像其他数据库服务器那样成熟,但据我所知,它可以工作。要使用 Django ORM,您可能必须为提要创建一个新的“实体”(不熟悉此处的 Django,因此请根据需要进行修改),然后对其进行查询,就好像它是一个表一样。 View 的手动管理是一个考虑因素,因此在您 promise 之前仔细研究它。
希望这对您有所帮助!
关于python - 使基于 SQL 的事件提要更快的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073030/