5

우리는 실시간 데이터웨어 하우징을 위해 Amazon Redshift를 평가하고 있습니다.수행 방법 Amazon Redshift로 실시간로드 하시겠습니까?

데이터는 Java 서비스를 통해 스트리밍되고 처리되며 데이터베이스에 저장되어야합니다. 행 단위로 처리 (실시간)하며 트랜잭션 당 하나의 행만 삽입합니다.

Amazon Redshift에 실시간 데이터를로드하는 가장 좋은 방법은 무엇입니까?

JDBC를 사용하여 INSERT INTO 문을 수행하거나 Kinesis Firehose 또는 AWS Lambda를 사용합니까?

둘 다 중간 계층으로 Amazon S3를 사용하고 "1 행"삽입이 아닌 더 큰 데이터 세트에 적합한 COPY 명령을 수행하기 때문에 이러한 서비스 중 하나를 사용하는 것에 대해 우려하고 있습니다.

답변

5

Amazon Redshift에서 개별 INSERT 문을 사용하는 것이 효율적일 경우입니다. 매우 빠른 SQL 쿼리를 제공하는 데이터웨어 하우스 으로 설계되었습니다. 데이터가 자주 갱신되고 삽입되는 트랜잭션 처리 데이터베이스는 아닙니다.

가장 좋은 방법은 배치 (또는 마이크로 배치)를 통해 COPY 명령을로드한다. Kinesis Firehose는이 방법을 사용합니다. 여러 노드를 사용하여 데이터를 병렬로로드하므로 훨씬 효율적입니다.

실시간으로 데이터를 처리하려는 경우 Amazon Redshift가 사용할 최적의 데이터베이스가 아닐 수 있습니다. 기존 SQL 데이터베이스 (예 : Amazon RDS에서 제공), NoSQL 데이터베이스 (Amazon DynamoDB 등) 또는 Elasticsearch를 사용해보십시오. 많은 양의 데이터 (일반적으로 많은 테이블 조인이 관련된)를보고하는 데 중점을 두는 경우에만 Redshift를 선택해야합니다. Amazon Redshift Best Practices for Loading Data에서 언급 한 바와 같이

:

복사 명령이 옵션을 선택하지 않습니다 당신은 SQL 삽입이 필요한 경우는, 가능하면 다중 행를 삽입 사용합니다. 한 번에 한 행 또는 몇 행만 데이터를 추가하면 데이터 압축이 비효율적입니다.

+0

거의 모든 차원 테이블 (100k-600k 행)이있는 사실 테이블에는 약 1TB의 데이터가 있으며 AWS Redshft는 적절한 솔루션으로 보입니다. 그러나 실시간 로딩이 필수적입니다. – fenix

+0

또 다른 옵션은 Presto를 사용하여 Amazon에 저장된 데이터를 스캔하는 [Amazon Athena] (http://docs.aws.amazon.com/athena/latest/ug/what-is.html) (현재 제한적으로 배포 중입니다)입니다. S3. S3에 데이터를 저장 한 다음 Athena 쿼리를 실행하면됩니다. 데이터를 압축하고 분할하거나 ORC/여기 엔 나무 마루 형식으로 저장할 수 있으면 가장 잘 작동합니다.쿼리가 아니라 업데이트가 필요합니다. S3에 데이터를 직접 저장하여 데이터를 업데이트하십시오. –

3

가장 좋은 옵션은 이벤트 일괄 작업을하는 Kinesis Firehose입니다. Firehose에 이벤트를 하나씩 쓰고 있으며, 정의에 따라 최적의 방식으로 이벤트를 배치하고 있습니다. 일괄 처리 할 시간 (분) 또는 일괄 처리의 크기 (MB)를 정의 할 수 있습니다. INSERT로 Redshift에 이벤트를 더 빠르게 삽입 할 수는 있지만이 방법은 확장 할 수 없습니다. COPY는 거의 모든 규모에서 작동하도록 설계되었습니다.

+0

감사합니다. 그러나 실시간이 아니며, 최대 60 초 (최소 버퍼)의 지연이 있습니다. 맞습니까? – fenix

+1

@fenix이 맞습니다. Redshift는 실시간 데이터 로딩을위한 최적의 데이터베이스가 아닙니다. – dizzyf

관련 문제