ruby-on-rails-3 - 使用 Rails 针对 Postgres Follower(数据库镜像)运行分析

标签 ruby-on-rails-3 heroku

Heroku 关于 Postgres Followers 的文档宣称“Followers 可用于......提供数据的只读 View 以进行分析”,但它没有提供任何关于如何实现这一点的见解。

我的计划是让“主数据库”由“分析数据库”镜像;在分析数据库上运行一些主要的数字运算 SQL 查询,并将结果存储在主数据库的表中。

我还没有找到有关如何访问分析数据库进行这些查询的详细信息,同时仍然使用主数据库进行一般访问。我发现的大多数资源都讨论了调用

class MyModel < ActiveRecord::Base
    establish_connection :analytics   # and configure analytics within config/database.yml
end

但是,这将导致 MyModel 的所有存储都位于关注者上(顺便说一句,这不起作用,因为关注者是只读的)。我希望主要存储空间位于主数据库上,但只需对跟随者进行一些(只读)访问。

可能的解决方案:

1) 有一个运行不同环境的 Rails 应用单独实例,例如“分析”而不是“生产”。因此,它将使用分析数据库进行所有访问。然后将结果存储在

class AnalyticsData < ActiveRecord::Base
    establish_connection :production if Rails.env == 'analytics'
end

这将导致 AnalyticsData 结果存储在主生产数据库中。

2) 有一个 Rails 应用程序的单个实例。

  • 开始分析工作之前,调用 ActiveRecord::Base.external_connection(:analytics)
  • 进行处理
  • 调用 ActiveRecord::Base.external_connection(:product)
  • 实例化 AnalyticsData 对象以保存结果

我完全不确定后一种方法是否有效,但它的优点是不必担心保持两个 Heroku 应用程序同步。

想法?谢谢!

引用文献:

最佳答案

关注者的数据库 URL 将作为应用程序上的配置变量提供。您可以通过 heroku config --app your-app 看到这一点。

我将通过以下方式将其指定为 READONLY_DATABASE_URL

heroku config:add READONLY_DATABASE_URL=<the url> --app your-app

然后使用 activerecord 的任何分片插件,根据 ENV['READONLY_DATABASE_URL'] 设置正确的数据库连接参数。我没有使用过其中任何一个,但您应该在此处调查您的选项:https://www.ruby-toolbox.com/categories/Active_Record_Sharding (并在整个互联网上分享对您有用的内容!)

关于ruby-on-rails-3 - 使用 Rails 针对 Postgres Follower(数据库镜像)运行分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11937562/

相关文章:

ruby-on-rails - 如何使用 RSpec 在 Rails 中测试 i18n

python - Heroku 的 Gunicorn 和 Bottle 设置

ruby-on-rails - rails : pass has_many or belongs_to attribute in 'generate' command

ruby-on-rails - 如何根据操作使 before_filter 函数表现不同?

ruby-on-rails - Ruby on Rails 教程练习 3.5

ruby-on-rails - 需要 ActiveRecord 模型而不必需要整个类图,对于 active_record_spec_helper

git - Heroku 错误 : "Permission denied (public key)"

ruby-on-rails-3 - 带有部分修复的activeadmin heroku样式表配置问题

html - Rails 4 sass 应用程序文件无法读取导入的 css 文件

php - 如何在 Heroku 上配置 Laravel 5.1 的 .env 文件?