Ruby on rails heroku上的一个rails应用程序如何访问多个数据库

Ruby on rails heroku上的一个rails应用程序如何访问多个数据库,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我希望能够有一个应用程序访问HEROKU“系统”上的多个数据库。 是否可以动态更改与数据库的连接 为什么我问 我有一个应用程序,有很多非常处理器繁重的后台工作。如果一个给定的用户上传一个产品提要,比如50000个产品,该提要必须与现有产品进行比较,并且只更新增量,那么它可能需要“几”分钟的时间 现在,为了减少延误,我安排了多个工人,每个人都从停车场里咬一小口,直到没有人为止。在GUI开始感觉迟钝之前,我可以访问大约20个工作人员,因为DB正在受到冲击。 我已经对一些代码进行了调优,并在一定程度上

我希望能够有一个应用程序访问HEROKU“系统”上的多个数据库。 是否可以动态更改与数据库的连接

为什么我问

我有一个应用程序,有很多非常处理器繁重的后台工作。如果一个给定的用户上传一个产品提要,比如50000个产品,该提要必须与现有产品进行比较,并且只更新增量,那么它可能需要“几”分钟的时间

现在,为了减少延误,我安排了多个工人,每个人都从停车场里咬一小口,直到没有人为止。在GUI开始感觉迟钝之前,我可以访问大约20个工作人员,因为DB正在受到冲击。
我已经对一些代码进行了调优,并在一定程度上为数据库编制了索引,我相信我还可以做更多的工作,但它最终将受到收益递减定律的影响

对于一个用户,我不太在乎。。。如果你上传了5万个产品,你需要等一等

但是用户一选择上传会影响用户二。(不同的公司,因此没有数据交叉)

目前,我通过使用postgresql中的模式分离不同用户的数据来处理他们。 然而,不同的用户共享相同的数据库连接,即使是在我能看到的最好的计划中,也有20个用户试图同时上传50000个产品(例如,月/季度的第一个)。 因此,用户21将看到他们的系统速度大大降低

所以问题是:我可以为不同的数据库分配不同的用户吗?用户登录,根据中央数据库验证其信息,然后另一个数据库接管


我目前的解决方案是heroku的不同实例。维护代码很容易,因为它只有一个基数,我只需编写git推送脚本。唯一的问题是不同的登录URL;如果我找不到一个简单的DB交换机解决方案,我想我可以面对这个问题

heroku上的postgres数据库配置了环境变量。运行heroku配置时,您应该看到:

DATABASE_URL:   postgres://xxx.compute.amazonaws.com:5432/xxx
您可以使用这些变量连接到其他heroku实例上的数据库,或在不同的heroku应用程序上共享单个数据库

如果你试图在免费的heroku实例上运行这种东西,我认为这违反了他们的服务条款


如果是关于可伸缩性的话,我想你只需要为一个更昂贵的数据库实例付费。

heroku上的postgres数据库配置了环境变量。运行heroku配置时,您应该看到:

DATABASE_URL:   postgres://xxx.compute.amazonaws.com:5432/xxx
您可以使用这些变量连接到其他heroku实例上的数据库,或在不同的heroku应用程序上共享单个数据库

如果你试图在免费的heroku实例上运行这种东西,我认为这违反了他们的服务条款


如果是关于可伸缩性,我认为您只需支付更昂贵的数据库实例的费用……

听起来您可以按用户或用户集进行数据切分,而无需太多担心,因为您已经按模式将它们分开了。如果是这种情况,并且您正在使用Ruby和ActiveRecord,请查看。我想您不希望在运行中加速数据库,相反,您已经构建了它们,可以随时使用,并且可以在运行中添加更多

诚然,通过使用合适的工具进行这种类型的密集处理(如Heroku Hadoop附加组件),听起来您正在做的事情可以更有效地完成;尽管如此,如果出于任何原因,这不是一个选项,请查看上面的gem。当然,你可以在技术上管理你自己的ActiveRecord连接,而不需要这个gem,但是我想你会发现这会很快让人痛苦


当然,如果您不使用Ruby或ActiveRecord,仍然可以对数据进行切分,并在应用程序的语言中查找类似于上面gem的内容:)。

听起来您可以按用户或用户集对数据进行切分,而无需太多担心,因为您已经按模式将它们分开了。如果是这种情况,并且您正在使用Ruby和ActiveRecord,请查看。我想您不希望在运行中加速数据库,相反,您已经构建了它们,可以随时使用,并且可以在运行中添加更多

诚然,通过使用合适的工具进行这种类型的密集处理(如Heroku Hadoop附加组件),听起来您正在做的事情可以更有效地完成;尽管如此,如果出于任何原因,这不是一个选项,请查看上面的gem。当然,你可以在技术上管理你自己的ActiveRecord连接,而不需要这个gem,但是我想你会发现这会很快让人痛苦


当然,如果您不使用Ruby或ActiveRecord,仍然可以对数据进行切分,并在应用程序的语言中查找类似于上面gem的内容:)。

只是想知道,您建议使用什么加载项。。。我的团队暂时回避了这个问题,在heroku上安装了不同的应用程序,每个应用程序都有自己的代码和数据库。。。老实说,这是我们在项目开始之前就提出的建议。不过我还是会找到答案的,Heroku上只有一个Hadoop插件,珍宝数据Hadoop;这在中国实施并不难。它的好处在于,它只使用输出到标准输出的数据,而不需要访问数据库。您还可以直接使用Amazon的Hadoop解决方案,它最终会变得更便宜,而且不会无缝地开始使用。我猜想您已经在使用一些队列实现来异步完成所有这些工作,比如Resque。也许不需要处理数据库中的所有数据比较,而是将其移动到一个应用层,您可以在多个dyno之间进行分解。只是想知道,您建议使用什么附加组件。。。我的团队暂时回避了这个问题,在heroku上安装了不同的应用程序,每个应用程序都有自己的代码和数据库。。。老实说,这是我们在项目开始之前就提出的建议。尽管如此,我还是会找出这个问题的答案。