2017-05-10 11 views
0

センサーからKinesisへのメッセージを受信して​​います。lambdaを使用して処理し、Kinesis Firehoseを使用してRedshiftにロードします。すべてのメッセージが解析され、1つの大きなステージングテーブルに挿入されます。我々は、センサデータの集計/分析を行う必要があります。センサーデータのほかに、私たちが保管しているヘッダーには多くの情報がありますが、現在は使用していません。正規化と圧縮

このステージングテーブルのデータを正規化スタースキーマにロードするか、列の圧縮を有効にして代わりに1つの巨大な非正規化テーブルを使用するのは意味がありますか? Redshiftは非正規化データとどのくらいうまく機能しますか?両方のオプションの長所と短所?

+0

「正規化スタースキーマ」とは何を意味するのかよくわかりません。定義上、スタースキーマは*非正規化*です。 – Nathan

+0

あなたの仮説を試してみませんか?スタースキーマにtgeデータをロードして、最も頻繁なクエリとテーブルのサイズをベンチマークしてみてください。また、データを1つの大きなテーブルにロードして同様に処理します。あなたはあなたの答えを持っています。これは実際にテーブルの使用例とデータのサイズに依存します。これについては「正しい道」はありません。 – Satyadev

+0

@Nathanあなたが正しいです、私は、標準化された寸法のスノーフレークのような – szu

答えて

1

私の経験では、多くの列を持つ巨大なテーブルは、遅いクエリを引き起こします。幅の広いテーブルの代わりに狭いテーブルを作成すると、パフォーマンスが向上する可能性があります。何をすべきかを決める前に、分析のクエリと、集計テーブルを作成するためのクエリと、データの希薄さを考慮する必要があります。一方、結合は全体的に高価です。そして、たくさんの 'join'を必要とする構造体が必要な場合は、それに応じてソートキーとdistキーを調整する必要があります。 ここにドキュメントがありますhttps://aws.amazon.com/blogs/big-data/optimizing-for-star-schemas-and-interleaved-sorting-on-amazon-redshift/