2

Postgres Followers に関する Heroku のドキュメントでは、「Followers は ... 分析のためにデータの読み取り専用ビューを提供するために使用される可能性がある」と宣伝していますが、これを実装する方法についての洞察はありません。

私の計画は、「メインデータベース」を「分析データベース」によってミラーリングすることです。分析データベースで実行されているいくつかの主要な数値処理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.establish_connection(:analytics) を呼び出します。
  • クランチをする
  • ActiveRecord::Base. Establish_connection(:production) を呼び出します
  • AnalyticsData オブジェクトをインスタンス化して結果を保存する

後者のアプローチが機能するかどうかはまったくわかりませんが、2 つの Heroku アプリの同期を維持することを心配する必要がないという利点があります。

考え?ありがとう!

参考文献:

4

2 に答える 2

3

フォロワーのデータベース 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 (そして、あなたにとって何がうまくいったかをインターネット全体に共有してください!)

于 2012-08-13T19:09:48.480 に答える
1

分析作業のためだけに読み取り専用のフォロワーにアクセスするには、別のモデルを作成し、次のいずれかを行います。

  1. 手動で適切なテーブルを指す
  2. 新しいモデルで元のモデルを拡張する (同じスコープまたはメソッドにアクセスできるようにする)

例:

class AnalyzeMyModel < MyModel
  set_table_name 'my_models'

  # ...connect to follower db...

  def self.sold_today_by_model_number(model)
    NumberCrunch.create name: "#{model} sold #{Date.today}",
                        data: created_today.where(model_number: model).to_json
  end

  def self.number_sold_today_by_model_number(model)
    NumberCrunch.create name: "Number of #{model} sold #{Date.today}",
                        data: sold_today_by_model_number(model).count
  end
end

# Usage:

  numbers_crunched = AnalyzeMyModel.number_sold_today_by_model_number(9001)
  puts "#{numbers_crunched.name}: #{numbers_crunched.data}"
  # "Number of 9001 sold DATE: 9876"

これで、同じアプリから通常どおり MyModel を使用し、フォロワーからのレポート/分析データに AnalyzeMyModel を使用できます。

于 2013-10-17T03:44:22.683 に答える