ある企業が、Amazon Aurora PostgreSQL を使ったシステムで、大量のデータをバッチ処理でロードするETL 処理のパフォーマンスが低いという問題を抱えている。毎晩数百万件のレコードを Aurora テーブルに UPSERT する処理に 4〜5 時間かかっており、2 時間以内に完了させたい。データはステージングの S3 に CSV 形式で保存されている。最も適切な方法はどれか。
- A. Amazon Aurora の並列クエリ機能を有効化して大量データの処理を高速化する。
- B. Amazon Redshift に一時ステージングテーブルを作成して S3 から COPY コマンドでデータを高速ロードし、Aurora に必要なデータのみをバッチで書き込む。または AWS Glue ETL ジョブを使って S3 から Aurora へのバルクロードを並列処理する。
- C. Aurora の自動バックアップを無効化してETL 処理中のオーバーヘッドを削減する。
- D. アプリケーションから 1 件ずつ UPSERT クエリを発行し、マルチスレッドで並列化する。
解答と解説を見る
正解: B
大量データの S3 から Aurora へのロードには、AWS Glue ETL ジョブが並列処理と最適化されたコネクタ(Aurora の JDBC)を使って高速バルクインサートを実行できる。Glue は処理をワーカー数に応じてスケールでき、数百万件のレコードを 2 時間以内に処理できる可能性が高い。Aurora の COPY コマンドは PostgreSQL に対応しており、S3 から直接高速ロードも可能。選択肢Dの 1 件ずつの UPSERT マルチスレッドは、ネットワーク往復とトランザクションオーバーヘッドが累積して非常に遅く、バルクロードよりも大幅に時間がかかる。選択肢CのAurora 自動バックアップの無効化は ETL パフォーマンスに直接影響せず、本番環境でのバックアップ無効化はデータ保護上のリスクが高い。選択肢Aの Aurora 並列クエリ機能(Parallel Query)は分析クエリの高速化に使うもので、データのバルクロードのパフォーマンス向上には貢献しない。
📚 関連サービスの解説: Amazon Redshift ・ Amazon S3