2012-04-18 20 views

答えて

1

Vertica Documentationのコンセプトガイド.pdf (から23ページ目)。

プロジェクションは、クエリの実行を最適化する形式でデータを格納します。 問合せで使用するたびに計算するのではなく、結果セット をディスクに格納するという点で、マテリアライズド・ビューと似ています。

予測は、SQLのエンドユーザーに透過的です。 Verticaクエリ オプティマイザは、 クエリに使用する最適な予測を自動的に選択します。

クエリのパフォーマンスを向上させるために必要なことは、すべてプロジェクションを作成することです。 Verticaは自動的にそのクエリに使用する最良の投影法を選択します。 (注:テーブルの代わりに具体的に照会することで、特定の投影法を強制的に実行することができます)

投影に関するあなたの理解はわかりませんが、投影に関するより具体的な質問は、ポイント。コンセプトの一般的な見方をお探しの場合は、コンセプトガイド.pdfの入手と読解をお勧めします。 http://my.vertica.com

+0

ありがとうございました。あなたの返事はとても役に立ちます。私はこれについてもう少し質問があります。 投影は結果セットをディスクに保存し、ビューはクエリで使用されるたびにテーブルのデータを計算するという点を除き、投影はVIEWSと似ています。 VIEWをPROJECTIONの代替として使用できますか?もしそうなら、パフォーマンス上の問題はありますか? – Murali

+0

@Murali:Verticaの 'Views'は基本的にはクエリです。 (_SQL Reference Manual.pdf_より) "[in]ビューを含むクエリでは、ビュー名はビューの定義クエリ" – Nija

+0

ありがとうございます。 btw、http://my.vertica.comからConcepts Guide.pdfをダウンロードできませんでした。許可されたユーザーだけがダウンロードできるようです。私はサインアップしましたが、まだアクティベーションメールを受け取っていません。 .pdfガイドを入手する他の方法はありますか? – Murali

7

Verticaはインデックスを使用してデータを検索しません。

概念的には、SQLを使用してテーブルにアクセスします。しかし、フードの下には、テーブルのデータが投影に格納されています。これをさまざまなクエリに対して最適化することができます。

私はそれをカードのデッキを表すテーブルと考えています。ポーカーをしている場合は、「Select * from CardDeck limit 5;」のようなことがあります。

のは、あなたが以下の列で定義された表があるとしましょう:

FaceValue int型(ちょうど顔の値はint型ですと仮定しましょう)、 スーツはvarchar(10)

私はその後、私の予測を作成することができます(私はパーティショニング、スーパープロジェクション、バディープロジェクションなどの詳細は省略しています)。

FaceValue、FaceValueによってCardDeck順序からスーツを選択 として投影CardDeck_p1 ( FaceValue ENCODING RLE、 スーツ) を作成します。

FaceValue、スーツによってCardDeck順序からスーツを選択 として投影CardDeck_p2 ( FaceValue、 スーツ) を作成します。

ここで、各列には、投影で定義されている異なるタイプのエンコードを取得できます。そして、以前のバージョンを使用して以来ずっと使っていなかったデータベースデザイナーは、あなたのために計画を立てるのに役立ちます。

カードアナロジーのデッキに戻って、カードのデッキにアクセスしたいと思いますが、カードのシャッフルを変えたいとします。 Verticaの射影は、あなたに異なるシャッフルを与えます。テーブルは、実際には、投影に格納されているデータにアクセスするための構造です。しかし、SQLを書く場合は、テーブルにアクセスします。

+0

ありがとう、geoffrobinson! – Murali

1

ジオフの回答のポイントを強調したい - 投影はディスク上の物理的な構造です。表の複数の投影を定義すると、問合せのパフォーマンスは向上しますが、ディスクのスペースが増え、ロード時間が遅くなります(各投影に行を配置する必要があるため)。

テーブルにすべての列と部分的な投影を格納するスーパープロジェクションがあります。サポート/最適化を求めるクエリでテーブルの列のサブセットのみが必要な場合は、部分投影を使用します。各テーブルには少なくとも1つのスーパープロジェクションが必要です。定義していない場合、Verticaはデフォルトのものをプロビジョニングします。これはパフォーマンスが非常に悪い可能性があります。

推奨される方法は、データベースデザイナーツールを使用してテストデータとテストクエリを使用してテーブルを分析することです。その後、プロジェクションを提案することができます。私は個人的にこのように大きな成果を上げていませんでしたが、DBDツールの使い方を知ることは、Verticaの誰かの訓練のカリキュラムの一部でなければなりません。

+0

ありがとうございますkimbo305 – Murali

3

がありvertica.comブログでVerticaの突起のいくつかの素晴らしい説明をしているし、それを使用する方法の助言:

+0

リンクは既に壊れています..ちょうどメインページ。 –

0

あなたはビューに精通しているようです。プロジェクションはコンセプトのビューに似ていますが、どちらも両方のレベルをキャッシュしています。簡単に言えば、ビューはクエリ文をキャッシュし、投影法はクエリ結果をキャッシュします。

ビュークエリステートメントをキャッシュします。あらかじめ定義されたクエリに名前を付け、その後それらを呼び出す。ビューのクエリは作成時には実行されません。ビューを使用してクエリを実行すると、通常のクエリであるためパフォーマンスが向上しません。

プロジェクションキャッシュクエリ結果。投影クエリは作成時に実行され、結果はストレージに保存されます。クエリ結果を利用できるクエリを実行すると、Verticaはこれらの予測を使用してクエリに応答し、クエリのパフォーマンスを向上させます。投影が作成された後、特別な操作は必要ありません.Vericaは、クエリに役立つ場合、投影を自動的に選択します。

ビューのような投影は、テーブル列のサブセットを選択したり、他のテーブルとの結合を実行したり、他のテーブルとの結合を実行したりすることができます。特定の列で注文します。しかし、異なる投影法は、問合せ結果を保存するために独自の領域を占有し、より多くの投影が作成されると、消費されるスペースが増えます。関連するソーステーブルが更新されている間、投影は自動的に更新されます。更新処理はバックグラウンドで実行されるため、クエリの複雑さやデータサイズによっては時間がかかる場合があります。したがって、投影法は、多くの書き込みよりも多くの読み取りに適しています。ユースケースの観点から見ると、リアルタイムのWebダッシュボードと比較して、プロジェクションはレポート作成に適しています。

実装の詳細では、Verticaのテーブルはすべて論理的です。テーブル内のすべてのデータは、関連する各スーパープロジェクションに格納されます。スーパープロジェクションにはテーブルのすべての列が含まれ、デフォルトで自動的に作成されます。他のすべての予測は超予測から導き出されます。

にVerticaは突起がクエリに使用されるかを決定しますが、あなたはまた、それらを使用するようにVerticaを強制的に直接投影の名前を指定することができます。

-- List all projections 
SELECT projection_name FROM projections; 

-- Force to use super projection, _super is the suffix of the super projection 
SELECT * FROM FACT_TABLE_super; 

あなたは何を参照して説明文を使用することができます予測はクエリプランで使用されます。これは、クエリのパフォーマンスを向上させるのに役立ちます。