私は現在、Webアプリケーションのパフォーマンスを改善しようとしています。アプリケーションの目的は、を提供すること(real time) analytics
です。star schema
いくつかのファクトテーブルと多くのディメンションテーブルに類似したデータベースモデルがあります。データベースはMysql
とMyIsam
エンジンで実行されています。
ファクトテーブルのサイズは簡単に数百万を超える可能性があり、一部のディメンションテーブルも数百万に達する可能性があります。
ここで重要なのは、ディメンションテーブルがファクトテーブルに結合され、集計が行われると、selectクエリが非常に遅くなる可能性があるということです。これを聞いて最初に頭に浮かぶのは、データを事前に計算してみませんか?ユーザーは自由にカスタマイズ可能な複数のフィルターを使用できるため、これは不可能です。
ですから、私が必要としているのは、あらゆる目的に適したオールインワンシステムです;)残念ながら、それはまだ発明されていませんでした。そこで、2つの既存のシステムを組み合わせるというアイデアにたどり着きました。row oriented
aとcolumn oriented
データベースの混合(例:infinidb
またはinfobright
)。mysql MyIsamソリューション(高速挿入および行ベースのクエリ用)を維持し、列指向データベース(いくつかの列での高速集計操作用)を追加し、cronjobを介して定期的に(毎晩)入力します。問題は、現在のデータ(リアルタイムである必要があります)が照会される場合です。したがって、両方のデータベースからデータを取得する必要があり、複雑になる可能性があります。
infinidbを使用した最初のテストでは、いくつかの列の集計で非常に優れたパフォーマンスが示されたため、これがアプリケーションの高速化に役立つと思います。
だから問題は、これは良い考えですか?誰かがすでにこれを行ったのでしょうか?たぶんそれを行うためのより良い方法があります。
私はまだ列指向データベースの経験がなく、そのスキーマがどのように見えるかもわかりません。最初のテストでは、同じstar schema like
構造だけでなく構造でも良好なパフォーマンスが示されましたbig table like
。
この質問がSOに当てはまるといいのですが。