1

私は、さまざまなソースからのイベントをリッスンし、そのデータを赤方偏移クラスタにポンピングすることによって、赤方偏移データベースを構築しています。Redshiftパフォーマンス:SQLクエリとテーブルの正規化

アイデアは、COPYコマンドを使用してデータを赤色シフトにポンピングするためにKinesis Firehoseを使用することです。しかし、私はここにジレンマを持っている:私は、下記のような最初の選択クエリを使用して赤方偏移からいくつかの情報を照会したい:

select A, B, C from redshift__table where D='x' and E = 'y'; 

赤方偏移から必要な情報を取得した後、私は、イベント通知でその情報を結合しますデータを収集し、キネシスに要請する。キネシスはその仕事をし、必要なCOPYコマンドを発行します。

私の質問は、イベント通知を受け取る予定の時間以来、1秒ごとに言うように、赤信号を繰り返しクエリすることをお勧めしますか?

今私は別のシナリオを説明してみましょう:

私は私のテーブルを正規化し、その後、別のテーブルにいくつかのフィールドを分離した場合、私は正規化されたデザインを持つ少数の赤方偏移のクエリを実行する必要があります(一回30かもしれ秒)

しかし、このアプローチの欠点は、データをいったんredshiftに入れたら、赤いシフトデータでリアルタイム分析を実行しながらテーブルジョインを実行する必要があることです。

は、だから私はアプローチが良いだろうハイレベルに知りたい:

  1. は、単一の平らなテーブルを持っていますが、イベント通知にキネシスする要求を発行する前にそれを照会します。分析を実行している間は、テーブル結合はありません。

  2. 2つのテーブルを持ち、redshiftを頻繁にクエリしません。しかし、BI /分析ツールを使用して結果を表示しながらテーブル結合を実行します。

これらのうち、どちらをお使いになるとよいでしょうか?どちらの場合も適切なソートキー/ディストリビューションキーを使用することを前提とします。

+0

一般的な&ここの両方の[*標準化](https://stackoverflow.com/a/40640962/3404097)は正確に何を意味しますか? 1NFになる可能性があり、「非原子」値を排除する可能性はありますか?悲しいことに、「最高」(1)は、質問者がそれを定義するまでは何も意味しません。(2)多くの上位レベルから下位レベルの詳細(使用、実装、リソース、コスト便益) 「適切な鍵配布」は正しい方向です。最適な&2つのデザインを固定して、あなたのワーフフローとセットアップをゲストにしてテストしましょう。 – philipxy

+0

"RedshiftはOLTPスタイルのデータベースではないので、非常に大規模なクエリは少なく、非常に小さいクエリは最適化されません。このシナリオでの応答時間は、1秒あたり1つのクエリに対して十分速くないことがあります。また、同時実行性*(同時実行可能なクエリの数)も考慮する必要があります。 - クラスタ全体で最大同時実行数が50になるため、プロセスは利用可能なスロットの1つをほぼ永久に使い切ることになります。 http://docs.aws.amazon.com/redshift/latest/dg/cm-c-defining-query-queues.html – Nathan

答えて

2

私は間違いなくあなたの第2の選択肢に行くでしょう。これはAmazon Redshiftの優れた点です(特にSORTKEYとDISTKEYが正しく設定されている場合)。

できるだけ効率的な方法でストリーミングデータをRedshiftにしてから、クエリを実行するときに参加させます。あなたはそのように多くのクエリを少なくします。

また、通常のジョブ(時間単位など)を実行して、データをワイドテーブルにバッチ処理することもできます。ロード後にデータをクエリする必要があるかどうかによって異なります。

+0

私はまた、2番目のオプションに傾いています。私はそれが行く方法だろうと思う。だから私はあなたの答えを受け入れています。私は頭出しをしたかった。おそらく経験的にもそれをテストしなければならないでしょう。ありがとう! – paratrooper

関連する問題