2012-01-23 11 views
2

私が構築したオンラインチケットシステムでは、クライアントの注文に関するリアルタイムの分析レポートを追加する必要があります。分析データ用の非正規化データベーステーブルの使用

重要な注文データは、複数のテーブル(顧客、注文、line_items、package_types、チケット)に分割されます。各表には、クライアントが必要とする可能性があるレポートにとって重要でない追加データが含まれています。

私は、各注文を非正規化レポートテーブルの別個の広告申込情報として記録することを検討しています。私はこれが理にかなっているかどうかを判断しようとしています。

通常、レポート用に実行するクエリは、一度に2つまたは3つのテーブルにまたがって参加する必要があります。各テーブルには適切なインデックスが追加されています。

すべての注文データを、レポートに必要な列のみを含む1つのテーブルにコンパイルすることは意味がありますか?

アプリケーションはRuby on Rails 3上に構築され、DBはPostgreSQLです。

EDIT:これは、ブラウザのデータをできるだけ早くレンダリングすることです。

+0

正規化されたデータからレポートを取得するのが遅いですか? – Mark

+0

私は正確なベンチマークを行っていませんが、要求を開始してから終了するまでの秒数を数えるだけで、ページが正規化されたデータからレンダリングされるのに約20秒以上かかります。それは私が望むより少し長いです。 –

答えて

2

は、目標が何であるかによって異なります。レポートの出力をより速く表示したい場合は、それが確実に機能します。バッチ更新によってデータがいくらか維持されるという点でトレードオフです。新しいレコードがベーステーブルに入ったときにいつでもテーブルを更新するトリガを書くことができますが、それは潜在的にオーバーヘッドを増やす可能性があります。

このケースでは、新しいテーブルの代わりにビューを使用する方がよいでしょうか?

+0

ええ、私の目標は、ユーザーのためにできるだけ早くデータをレンダリングすることです。正規化されていないテーブルを更新するには、Orderモデルで:after_createコールバックを使用することが最も一般的です。これは、order_dataテーブルを更新するバックグラウンドジョブを開始します。私は、PostgresのビューをRailsアプリケーションで動作させるにはどうすればよいかわかりませんが、見ていきます。提案していただきありがとうございます。 –

+1

ポストバックに精通していませんが、他のデータベースの場合は、テーブルにアクセスするのと同じ方法でビューにアクセスできます。データベースのキャッシュが最適化されていない限り、パフォーマンスはそれほど速くはありません。サマリーテーブルが速くなると思う。 – Brian

+1

ビューはテーブルより高速ではないかもしれないが、マテリアライズドビューは... – courtsimas

関連する問題