3

私は現在、Webアプリケーションのパフォーマンスを改善しようとしています。アプリケーションの目的は、を提供すること(real time) analyticsです。star schemaいくつかのファクトテーブルと多くのディメンションテーブルに類似したデータベースモデルがあります。データベースはMysqlMyIsamエンジンで実行されています。
ファクトテーブルのサイズは簡単に数百万を超える可能性があり、一部のディメンションテーブルも数百万に達する可能性があります。
ここで重要なのは、ディメンションテーブルがファクトテーブルに結合され、集計が行われると、selectクエリが非常に遅くなる可能性があるということです。これを聞いて最初に頭に浮かぶのは、データを事前に計算してみませんか?ユーザーは自由にカスタマイズ可能な複数のフィルターを使用できるため、これは不可能です。

ですから、私が必要としているのは、あらゆる目的に適したオールインワンシステムです;)残念ながら、それはまだ発明されていませんでした。そこで、2つの既存のシステムを組み合わせるというアイデアにたどり着きました。row orientedaとcolumn orientedデータベースの混合(例:infinidbまたはinfobright)。mysql MyIsamソリューション(高速挿入および行ベースのクエリ用)を維持し、列指向データベース(いくつかの列での高速集計操作用)を追加し、cronjobを介して定期的に(毎晩)入力します。問題は、現在のデータ(リアルタイムである必要があります)が照会される場合です。したがって、両方のデータベースからデータを取得する必要があり、複雑になる可能性があります。

infinidbを使用した最初のテストでは、いくつかの列の集計で非常に優れたパフォーマンスが示されたため、これがアプリケーションの高速化に役立つと思います。

だから問題は、これは良い考えですか?誰かがすでにこれを行ったのでしょうか?たぶんそれを行うためのより良い方法があります。

私はまだ列指向データベースの経験がなく、そのスキーマがどのように見えるかもわかりません。最初のテストでは、同じstar schema like構造だけでなく構造でも良好なパフォーマンスが示されましたbig table like

この質問がSOに当てはまるといいのですが。

4

1 に答える 1

3

Greenplumは、PostgreSQL に対する独自の (しかしほとんど無料の) 拡張機能であり、高度にカスタマイズ可能な圧縮を備えた列指向テーブルと行指向テーブルの両方をサポートしています。さらに、トランザクションの負荷が大きい部分とそうでない部分があると予想される場合は、同じテーブル内で設定を混在させることができます。たとえば、直近の年を行指向で非圧縮にし、前の年を列指向で Quicklz 圧縮し、過去のすべての年を列指向で bz2 圧縮することができます。

Greenplum は個々のサーバーで無料で使用できますが、大企業の顧客を対象としているため、MPP 機能 (主なセールス ポイント) を使用してスケールアウトする必要がある場合は、多額の費用がかかります.

(免責事項: 私は専門的に Greenplum と取引を行ってきましたが、購入するソフトウェアを評価するという文脈でのみです。)

スキーマを設定する方法の問題に関しては、データの詳細を知らずに多くを語ることは困難ですが、一般に、圧縮された列指向のテーブルを使用すると、スキーマ設計に関するすべての直感が窓の外に出てしまうはずです。

特に、正規化は努力に見合う価値がほとんどなく、非正規化によって限界レベルのコミカルなレベルの冗長性を実現することで、パフォーマンスが大幅に向上することがあります。データが圧縮されていない状態でディスクにヒットしない場合は、各顧客の名前を 40,000 回繰り返しても気にしないかもしれません。Infobrightの圧縮アルゴリズムは、この種のアプリケーション用に特別に設計されており、テーブルの論理サイズと物理サイズの比率が 40 対 1 になることは珍しくありません。

于 2011-04-15T12:35:11.887 に答える