[AWS] Redshift란?

01. Amazon Redshift ?

Amazon Redshift ?

  • AWS 클라우드에서 완벽하게 관리되는 페타바이트급 데이터 웨어하우스 서비스입니다.

  • 데이터 웨어하우스는 노드라는 컴퓨팅 리소스의 모음으로, 노드는 클러스터라는 그룹을 구성합니다.

 Amazon Redshift 개념
  • 클러스터 – Amazon Redshift 데이터 웨어하우스의 핵심 인프라 구성 요소는 클러스터입니다.

    1. 클러스터는 하나 이상의 컴퓨팅 노드로 구성됩니다. 컴퓨팅 노드는 컴파일된 코드를 실행합니다.

    2. 클러스터에 두 개 이상의 컴퓨팅 노드가 제공된 경우 추가 리더 노드가 컴퓨팅 노드를 조정합니다.

    3. 리더 노드는 비즈니스 인텔리전스 도구 및 쿼리 편집기와 같은 애플리케이션과의 외부 통신을 처리합니다.

  • 클라이언트 애플리케이션은 리더 노드와만 직접 상호작용합니다.

    1. 데이터베이스 – 클러스터에는 하나 이상의 데이터베이스가 포함되어 있습니다.

    2. 사용자 데이터는 컴퓨팅 노드에 있는 하나 이상의 데이터베이스에 저장됩니다.

    3. SQL 클라이언트는 리드 노드와 통신하고, 리더 노드는 이어서 컴퓨팅 노드와 쿼리 실행을 조정합니다.

 

Redshift 일반적인 데이터 처리 흐름

  • Datashare를 사용하여 Redshift 클러스터에서 읽기용으로 라이브 데이터를 비교적 안전하고 쉽게 공유합니다.

  • Redshift Spectrum 을 사용하여 데이터를 Redshift 테이블에 로드 하지 않고도 S3 파일에서 데이터를 쿼리합니다.

  • 연합 쿼리를 사용하여 RDS 및 Aurora 또는 S3와 같은 관계형 데이터베이스의 데이터를 Redshift DB 데이터와 Join 합니다.

  • SageMaker Autopilot과 함께 작동하여 최상의 모델을 자동으로 얻고 Redshift에서 예측 함수를 사용할 수 있도록 합니다.

데이터 웨어하우스 시스템 아키텍처



리더 노드

  • 클라이언트 프로그램과 일어나는 통신을 비롯해 컴퓨팅 노드와 일어나는 모든 통신을 관리합니다.

  • 구문을 분석하여 데이터베이스 작업, 특히 복잡한 쿼리의 결과를 얻는데 필요한 단계를 연이어 실행하기 위한 실행 계획을 작성합니다.

  • 작성된 실행계획에 따라 코드를 컴파일하여 컴퓨팅 노드로 배포한 후 데이터 구간을 각 컴퓨팅 노드로 할당합니다.

컴퓨팅 노드

  • 리더 노드는 실행 계획을 구성하는 개별 요소마다 코드를 컴파일하여 각 컴퓨팅 노드에 할당합니다.

  • 그러면 컴퓨팅 노드가 컴파일 코드를 실행한 후 최종 집계를 위해 중간 결과를 리더 노드에 다시 보냅니다.

  • 각 컴퓨팅 노드마다 전용 CPU와 메모리, 그리고 내장 디스크 스토리지가 따로 있으며, 이는 노드 유형에 따라 결정됩니다.

노드 조각

  • 컴퓨팅 노드는 다수의 조각으로 분할됩니다.

  • 분할된 조각은 다시 각각 노드의 메모리 및 디스크 공간으로 할당되고, 여기에서 노드에 할당되는 워크로드를 처리합니다.

  • 리더 노드는 조각에 대한 분산을 관리하면서 쿼리 워크로드 또는 기타 데이터베이스 작업 워크로드를 각 조각으로 할당합니다.

  • 각 조각은 병렬 방식으로 실행되어 작업을 완료합니다.

대용량 병렬 처리

  • 대용량 병렬 처리(MPP)는 아무리 복잡한 쿼리라고 해도 빠른 속도로 실행하여 대용량 데이터를 처리할 수 있습니다.

  • 다수의 컴퓨팅 노드가 각 노드의 코어마다 전체 데이터를 분할하여 쿼리 실행하면서 최종 집계에 이를 때까지 모든 쿼리를 처리합니다.

열 기반 데이터 스토리지

  • 데이터베이스 테이블 정보를 열 기반 방식으로 저장하기 때문에 디스크 I/O 호출 및 로드해야 하는 데이터 크기가 감소합니다.

  • 열이 적절하게 정렬되면 쿼리 프로세스가 대용량의 데이터 블록 하위 집합을 빠르게 필터링할 수 있습니다.

쿼리 옵티마이저

  • 쿼리 실행 엔진은 MPP를 인식하고 열 기반 데이터 스토리를 활용하는 쿼리 옵티마이저를 통합합니다.

  • 다중 데이블 조인, 하위 쿼리 및 집계를 포함하는 복잡한 분석 쿼리를 처리하기위한 중요한 향상 및 확장을 구현합니다.

결과 캐싱

  • 쿼리 실행 시간을 줄이고 시스템 성능을 항상시키기 위해 특정 형식의 쿼리 결과를 리드 노드의 메모리에 캐시합니다.

  • 사용자가 쿼리하면, 결과 캐시에 유효한 항목 검색하여 찾을시 캐시된 결과를 사용하고 쿼리는 실행하지 않습니다.

노드 유형 정보

  • vCPU는 각 노드의 가상 CPU 수입니다.

  • RAM은 각 노드의 메모리 크기(GiB)입니다.

  • 노드당 기본 조각은 클러스터를 생성하거나 클래식 크기 조정으로 크기를 조정할 때 컴퓨팅 노드가 분할되는 조각 수입니다.

  • 탄력적 크기 조정을 사용하여 클러스터 크기를 조정할 경우 노드당 조각 수가 변경될 수 있습니다.

  • 탄력적 크기 조정 후에도 클러스터의 모든 컴퓨팅 노드에 있는 총 조각 수는 동일하게 유지됩니다.

 

02. TABLE DISTSTYLE


데이터 분산 목적

  • 데이터를 테이블에 로드할 때는 테이블 생성 시 선택한 배포 스타일에 따라 테이블의 행을 컴퓨팅 노드 및 조각으로 분산시킵니다.

  • 워크로드를 클러스터 노드에 균일하게 분산시킵니다. 만약 불균일 분산시 해당 노드가 더 많은 일을 해 쿼리성능을 떨어 뜨립니다.

  • 쿼리 실행시 데이터 이동을 최소화 하려면 조인 또는 집계에 참여하는 행이 같은 노드에 있어야 데이터 재분산 시킬 필요가 없습니다.

  • 테이블 마다 최적의 분산 스타일을 선책해야만 데이터 분산 밸런스를 맞춰 전체적인 시스템 성능을 크게 높일 수 있습니다.

데이터 재분산

  • 테이블에 데이터를 로드하면 테이블의 배포 스타일에 따라 테이블 행을 각 노드 조각으로 분산시킵니다.

  • 옵티마이저가 쿼리 계획에 따라 최적의 쿼리 실행을 위한 데이터 블록 위치를 결정합니다.

  • 쿼리가 실행되는 동안 데이터가 물리적으로 이동되거나 재배포됩니다.

  • 재분산에는 조인을 위해 특정 행을 노드로 전송하거나, 혹은 전체 테이블을 모든 노드로 브로드캐스팅하는 작업이 포함될 수 있습니다.

데이터 재분산 종류

  1.  ALL

  2. EVEN

  3. KEY

AUTO 분산

  • 테이블 데이터의 크기를 기반으로 최적의 배포 스타일을 할당합니다.

  • 예로 처음에 작은 테이블에 ALL 분산을 할당한 다음 테이블이 더 커지면 EVEN 배포로 변경합니다.

EVEN 분산

  • 리드 노드는 특정 열 값에 상관없이 행을 라운드 로빈 방식으로 조각에 분산시킵니다.

  • EVEN 배포는 테이블이 조인에 참여하지 않는 경우 적합하며, KEY 배포와 ALL 배포 사이에 명확한 선택이 없는 경우도 적합합니다.



KEY 분산

  • 행이 열 1개의 값에 따라 분산됩니다. 리더 노드는 일치하는 값을 동일한 노드 조각에 할당합니다.

  • 조인 키를 기준으로 분산시키면 리더 조인 열의 값에 따라 행을 조각에 공동 배치하기 때문에  열이 일치 하는 물리적으로 함께 저장됩니다.

 

ALL 분산

  • 전체 테이블의 복사본이 모든 노드로 분산됩니다.

  • EVEN 분산이나 KEY 분산은 테이블 행의 일부를 각 노드에 할당하는 반면 ALL 분산은 테이블이 참여하는 조인마다 모든 행을 배치합니다.

  • ALL 분산은 필요한 스토리지를 클러스터 노드 수와 곱하기 때문에 다수의 데이터를 테이블에 삽입, 수정 시 더 많은 시간이 걸립니다.

 
 

03. SORT KEY


SORT KEY?

  • 열 기반 데이터를 1MB 디스크 블록에 저장합니다.

  • 각 블록의 최소 값과 최대 값은 메타데이터로 저장됩니다.

  • 쿼리가 범위 제한 조건절을 사용하는 경우에는 쿼리 프로세서가 테이블 스캔 도중 최소/최대 값을 사용하여 블록을 건너 뛸 수 있습니다.

 
COMPOUND SORT KEY (복합 정렬 키)
  • 복합 키는 정렬 키를 정의할 때 나열되는 모든 열로 구성되며, 나열 순서를 다릅니다.

  • 복합 정렬 키는 조인 작업과 GROUP BY 및 ORDER BY 작업, 그리고 PARTITION BY를 사용하는 원도우 함수의 속도를 높이는 효과가 있음.

  • 이미 데이터가 로드되어 정렬까지 마친 테이블에 행을 추가하면 미정렬 영역이 증가하여 성능에 커다란 영향을 미칩니다.