Django与Heroku PostgreSQL数据库水平扩展

Django与Heroku PostgreSQL数据库水平扩展,django,postgresql,heroku,Django,Postgresql,Heroku,问题背景 我正在从事Django项目,该项目使用PostgreSQL,托管在Heroku上(也使用Heroku postgres)。一段时间后,数据量变得非常大,这会减慢应用程序的速度 为了从多个数据库读取数据,我尝试了复制,这有助于减少队列和连接时间,但大表仍然是问题所在 我可以根据用户的组对数据进行拆分,不同的组不需要相互交互 我已经读到了切分。但是由于我们使用了heroku postgres,所以很难定制切分 因此,我在下面提出了两个不同的想法 1。具有多数据库的应用程序群集(尚不允许

问题背景

  • 我正在从事Django项目,该项目使用PostgreSQL,托管在Heroku上(也使用Heroku postgres)。一段时间后,数据量变得非常大,这会减慢应用程序的速度
  • 为了从多个数据库读取数据,我尝试了复制,这有助于减少队列和连接时间,但大表仍然是问题所在
  • 我可以根据
    用户
    对数据进行拆分,不同的
    不需要相互交互
  • 我已经读到了切分。但是由于我们使用了heroku postgres,所以很难定制切分
  • 因此,我在下面提出了两个不同的想法
1。具有多数据库的应用程序群集(尚不允许嵌入图像)

  • 我们可以使用
    中间件
    数据库路由器
    来实现这一点
  • 但我不确定这对django是否友好
2。具有多个子应用程序的网关应用程序(尚不允许嵌入图像)

  • 这比以前的设计需要更少的工作量
  • 也可以在将来设置基于区域的子应用程序

我的问题是:从长远来看,这两种方法中,哪一种更适合django,并且更具可扩展性?

您有多少数据(行和/或大小)以及哪些查询变得缓慢?您是否对数据进行了适当的索引并优化了查询?@IainShelvington存在问题的表的大小已经在15GB左右,并且呈指数级增长。缓慢的查询主要是列表(应用了排序和分页)。不能说查询已完全优化,但随着数据量的不断增长,我们总有一天会对其进行水平扩展。优化查询始终是您应该做的第一件事,它将提高查询时间、应用程序响应时间并减少资源使用,无论您是否扩展,都是双赢的。如果您扩展了一个非优化的解决方案,那么您只是在推迟不可避免的问题,很快,当您的查询再次开始表现糟糕时,您将不得不重构这个新的设计,但这将非常困难。15GB不是很多数据您有多少数据(行和/或大小)以及哪些查询变得缓慢?您是否对数据进行了适当的索引并优化了查询?@IainShelvington存在问题的表的大小已经在15GB左右,并且呈指数级增长。缓慢的查询主要是列表(应用了排序和分页)。不能说查询已完全优化,但随着数据量的不断增长,我们总有一天会对其进行水平扩展。优化查询始终是您应该做的第一件事,它将提高查询时间、应用程序响应时间并减少资源使用,无论您是否扩展,都是双赢的。如果您扩展了一个非优化的解决方案,那么您只是在推迟不可避免的问题,很快,当您的查询再次开始表现糟糕时,您将不得不重构这个新的设计,但这将非常困难。15GB不是很多数据