2017-01-19 3 views
0

私は大きな時間範囲にわたる大量の瞬間的なデータを格納する赤方偏移テーブルを設計しています。私は2つのクエリpattensに基づいてソート・キーを選択するに取り組んでいます複合基準(時間範囲+列一致)のための最良の赤方偏移化合物のソートキー

CREATE TABLE analytics (
    user_id VARCHAR(30), 
    ts TIMESTAMPTZ, 
) 
diststyle even; 

# 1: select a bounded time range of recent data for a client (high perf priority) 
SELECT * FROM analytics WHERE user_id = foo and ts > month_start and ts <= month_end; 

# 2: select all events for a client (can be slower): 
SELECT * FROM analytics WHERE user_id = foo; 

私はソート・キーを決定し、いずれかを検討している

関連するスキーマは次のようになります:

オプション1:

sortkey(user_id, ts); 

オプション2:

sortkey(ts, user_id); 

オプション3:

interleaved sortkey (ts, user_id); 

オプション1は、両方のクエリを支援CLIENT_ID最初の利点を有します。しかし、時間ベースのクエリーパターンでは最初にクエリーを行うほうが時間的なクエリーパターンのほうが最適と思われ、データを細かくスライスすることができるため、オプション2が優れている可能性があります。最後に、Iオプション3では、2つのユースケースを均等にバランスさせることができます。

私の質問は以下のとおりです。

  1. がどのようにオプション1とオプション2は、ユースケース#1のための賢明なパフォーマンスを比較しますか?
  2. インタリーブされたインデックスはここで意味がありますか?ユーザーケース#1の複合インデックス作成とはどのように比較されますか?増加した負荷時間が心配です。

ここに掲載されているパフォーマンスに関するその他のご意見をお待ちしております。 Amazonのドキュメントを読んでも、ここで相対的なパフォーマンスのトレードオフを理解するのに十分な文脈は与えられませんでした。

答えて

0

大きなテーブルでは、最も重要なことは、配布キーを設定することです。 Redshiftがクエリを並列化するために使用する主な方法です。ディストリビューションキーがなければ、評価のために中間結果を単一のノードに「ブロードキャスト」する必要があります。 (Pro-tip:あなたのExplainプランのブロードキャスト・ステップを探して排除しようとする)

複合ソート・キーは必要なときに便利ですが、私の経験上、単純なソート・キーが最高のパフォーマンスを発揮します。ここでのソートキーの戦略上の優れた深いダイビングがあります:https://github.com/awslabs/amazon-redshift-utils/blob/ec7257e072e56375728aab4b9b0ebe38c95beb60/src/Investigations/EarlyMaterialization.md

私は次のことをお勧めします:

CREATE TABLE analytics 
( user_id VARCHAR(30) 
    ,ts TIMESTAMPTZ 
) 
DISTSTYLE KEY 
DISTKEY (user_id) 
SORTKEY (ts) 
; 
+0

ありがとうございました。私たちは明示的に削除することを選択しました DISTKEY(user_id) しかし間違いかもしれません。私たちの考えは、一部の大規模なクライアントがイベントデータの大半を占めており、それらを1つのノードに(分割するのではなく)集中させると、処理が遅くなります。ユーザーあたりのアナリティクスの数がユーザーごとに大きく異なる場合でも、アプローチはまだ理にかなっていますか? – segfaultDC5

+0

@ segfaultdc5それはそれがいかに塊であるかによって異なります。 Distキーは非常に重要なので、それを適所に置くためにかなりの歪みを許容する必要があります。大量の*(〜50%)の場合は 'EVEN'を使いますが、結合されたテーブルを' ALL'にし、ソートキーの第1列として 'user_id'を追加する必要があります。このビューでは、テーブルの歪度を評価できます。https://github.com/awslabs/amazon-redshift-utils/blob/8748d3d108a332b4712b8a91c0630dfc377f1ae9/src/AdminViews/v_extended_table_info.sql –

関連する問題