5

リアルタイムデータウェアハウスのAmazon Redshiftを評価しています。する方法Amazon Redshiftにリアルタイムで読み込む?

データはストリーム配信され、Javaサービスを通じて処理され、データベースに格納されます。行ごとに(リアルタイム)処理し、トランザクションごとに1行だけ挿入します。

Amazon Redshiftへのリアルタイムデータ読み込みのベストプラクティスは何ですか?

JDBCを使用してINSERT INTO文を実行するか、Kinesis Firehose、またはおそらくAWS Lambdaを使用しますか?

どちらも、Amazon S3を中間層として使用し、より大きいデータセットに適した「1行」の挿入ではないCOPYコマンドを実行するため、これらのサービスのいずれかを使用することに懸念しています。

答えて

5

Amazonレッドシフトで個別のINSERTステートメントを使用すると、が効率的ではありません。です。これは、データウェアハウスとして設計されており、非常に高速なSQLクエリを提供します。データが頻繁に更新されて挿入されるトランザクション処理データベースではありません。

ベストプラクティスは、COPYコマンドを介しバッチ(又はマイクロバッチ)をロードすることです。 Kinesis Firehoseはこの方法を使用します。複数のノードを使用してデータを並列にロードするので、これははるかに効率的です。

リアルタイムでデータを処理することを真剣に検討している場合、Amazon Redshiftは使用するのに最適なデータベースではないかもしれません。従来のSQLデータベース(Amazon RDSで提供されるデータベースなど)、NoSQLデータベース(Amazon DynamoDBなど)、またはElasticsearchを使用することを検討してください。 Redshiftの使用を選択するのは、大量のデータ(通常は多数のテーブル結合を含む)全体にわたるレポート作成に重点を置いている場合のみです。 Amazon Redshift Best Practices for Loading Dataで述べたように

可能な限りを挿入複数行を使用して、COPYコマンドはオプションではありません、あなたはSQLの挿入が必要な場合。一度に1行または数行だけデータを追加すると、データ圧縮が非効率的になります。

+0

ほとんどのディメンションテーブル(100k-600k行)で実際のテーブルに約1TBのデータがあり、AWS Redshftは適切なソリューションのようです。しかし、リアルタイムのローディングが必須です。 – fenix

+0

別のオプションは、Amazonに格納されたデータをスキャンするためにPrestoを使用する[Amazon Athena](http://docs.aws.amazon.com/athena/latest/ug/what-is.html)(現在は限定されたロールアウトである)ですS3。 S3にデータを保存してから、At​​henaクエリを実行するだけです。データを圧縮したりパーティション化したり、ORC/Parquet形式で格納することができれば最適です。クエリではなく、更新ではなく、S3に直接格納してデータを更新します。 –

3

最高のオプションは、イベントのバッチで作業しているKinesis Firehoseです。 Firehoseにイベントを1つずつ書き込んでいます。あなたの定義に基づいて最適な方法でイベントをバッチしています。イベントをバッチする時間(分)またはバッチのサイズ(MB)を定義できます。 INSERTを使用してイベントをRedshiftにすばやく挿入できますが、この方法はスケーラブルではありません。ほぼすべての規模で動作するように設計されています。

+0

ありがとうございますが、それはリアルタイムではありません、それは60(最短バッファ)まで遅れているでしょう、私は正しいですか? – fenix

+1

@fenix正しいです。 Redshiftは、リアルタイムのデータロードに最適なデータベースではありません。 – dizzyf

関連する問題