2017-03-17 3 views
0

Amazon Redshiftに大量のデータ(1日に数百万のレコード)が格納されるプラットフォームがありますが、そのデータもcronjob、および集計された統計情報は、Railsアプリケーションを実行するPostgreSQLデータベースに作成され、古いデータはRedshiftからパージされます。Rails 4モデル、シナリオに応じたスイッチDB - 最適なデザインパターンを探す

これは、最近の出来事(最終日または2日間)の統計情報に関して、私のRailsモデルはRedshiftから引き出す必要があるが、そうでなければPostgreSQLから引き出す必要があることを意味する。 PostgreSQLデータベースには集計統計のみが含まれるため、クエリも異なります。

これをコード化するのは難しいことではありませんが、このようなモデルがRailsにどのように適合するかはわかりません。 ActiveRecordはモデルをかなり緊密にDB実装に結合しているようですので、ActiveRecordを拡張しないプライマリモデルと、ActiveRecordモデルと、Redshiftクエリを処理するlibクラスを作成する必要があると考えています。これは私のシナリオに最適なデザインですか、それとも私が検討すべき他のデザインパターンがありますか?

答えて

0

外部データラッパーを使用して、PostgresからRedshiftテーブルにアクセスすることができます。設定ガイドについてはこちらを参照してください。http://www.vertabelo.com/blog/technical-articles/foreign-data-wrappers-for-postgresql

+0

これはActiveRecordとどのように統合されますか? このシナリオでは、モデルのRedshiftバージョンを使用するか、Postgresバージョンを使用するかを判断するロジックはどこにありますか? 2つのDBのクエリが異なるということは、どのように考慮されますか? – dpog

+0

どのDBをいつ使用するかを知っているロジックをアプリケーションに追加する必要があります。代わりに、PostgresテーブルとRedshiftテーブルの両方をUNION ALLビューにラップし、単一のモデルとして扱うこともできます。 FWIW、私は実際にこのデータをすべてレッドシフトに入れることを提案します。 –

+0

あなたはその質問を誤解しているようです。私は技術的にこれを行う方法を求めていない、私はこれを行う方法を知っている。 私が得ようとしているのは、使用するデザインパターンです。 これは、モデルの正しいバージョンを生成するファクトリオブジェクトが必要であると考えています。私はこれが最良のパターンであるかどうか、そしてRailsアプリケーションにこのようなコードを置くのに最適な場所はどこにあるのかを判断しようとしています。これはアプリ固有なので、/ libには属しません。 – dpog

関連する問題