![](https://velog.velcdn.com/images/lv2dev/post/b2f71773-f28b-465a-9b0e-529cd750b475/image.png)
RedShift란?
- AWS에서 완전관리형으로 제공해주는 클라우드 데이터웨어하우스
- 클러스터(노드집합)을 생성하고, 클러스터가 사용할 준비가 되면(프로비저닝 완료) 데이터 적재 및 분석 가능
- PostgreSQL을 기반으로 해서 표준 SQL을 이용한 데이터처리를 지원하고, BI도구로 분석할 수 있다.
데이터웨어하우스
- 정보(data) + 창고(warehouse)가 결합한 의미로 의사결정에 도움을 주기 위해 분석가능한 형태로 변환한 데이터들이 저장되어있는 중앙저장소
- 트랜잭션 시스템, RDB 및 기타 소스의 데이터들이 데이터 웨어하우스에 들어간다.
- 어플리케이션이나 운영시스템 내부에서 raw data들을 모아두고 이들 중 분석할 수 있는 데이터들을 창고처럼 쌓아둔 다음에, 이 데이터들을 데이터사이언티스트같은 사람들이 BI나 SQL을 이용해서 데이터를 엑세스한다.
데이터웨어하우스는 왜 필요할까?
- 대규모 데이터의 분석작업을 처리하는데는 한계가 있기 때문에 데이터웨어하우스가 필요하다.
RedShift 구성요소
- 리더노드와 하나이상의 컴퓨팅 노드로 구성되어 있다.
Leader Node
- SQL연결 엔드포인트, 외부 어플리케이션은 리더노드와 통신
- 노드간의 통신을 관리하는 노드로 메타데이터를 저장하고, 클러스터의 모든 쿼리수행을 관리한다.
Compute Node
- 실제 작업을 수행하는 노드로 각 노드마다 여러개의 슬라이스를 보유하고 있다.
- 병렬로 쿼리를 수행하고 S3 기반으로 백업 및 복구를 수행할 수 있다.
Slices
- 각 노드는 여러개의 슬라이스로 구성되어 있다.
- 각 슬라이스는 별도의 메모리, cpu, 디스크공간이 할당되어 있다.
- 슬라이스별로 독립적인 워크로드를 병렬적으로 실행한다.
RedShift 특징
대용량 '병렬'처리(Massive Parallel Processing(MPP))
- 분산형(MPP) 시스템
- 클러스터를 리더노드와 컴퓨팅 노드로 구성
- 컴퓨팅 노드는 하나 이상의 슬라이스로 구성
- 슬라이스에 데이터를 포함한다.
- 데이터를 병렬로 처리할 수 있도록 테이블의 행을 계산노드에 배포하고, 각 테이블마다 분산키를 선택하거나, All이나 Even 방식 중 하나의 방법으로 슬라이스를 선택한다. 그리고 쿼리들은 모든 슬라이스들에 걸쳐 병렬수행을 한다.
컬럼기반 데이터스토리 (Columnar data storage)
- 데이터베이스에 저장하는 테이블 정보를 행 기반이 아닌 컬럼(열)기반으로저장한다
- 컬럼으로 압축함으로써 데이터를 읽는 크기를 줄여 디스크io를 줄이고 쿼리성능을 향상시킬 수 있다.
- 압축기능의 자동 적용을 위해 copy명령으로 redshift로 데이터를 로딩하면서 데이터분석 할 수 있도록 압축 수행
분산
DISTKEY(Distribution Key)
- 명시적으로 지정한 컬럼을 기준으로 각 레코드의 슬라이스 배치가 결정됨
- 컬럼 카디널리티에 따라 슬라이스간 상당한 편차가 발생 가능함
- 예) 여러 테이블에서 조인의 대상이 되는 경우 DISTKEY로 분산
ALL
- 모든 레코드가 각 컴퓨팅 노드에 동일하게 복제함
- 예) 작은 테이블은 ALL(마스터 테이블)
EVEN
- 각 레코드가 슬라이스에 라운드로빈 방식으로 분산, 균등하게 데이터 저장함
- 예) 조인을 자주하지 않고 비정규화 된 테이블을 EVEN으로 분산
기능
Copy 명령 : 데이터로딩
- COPY 명령을 통해 S3, DynamoDB, EMR에 있는 데이터들을 병렬적으로 로딩할 수 있다.
- INSERT 명령을 사용하여 데이터를 테이블에 추가하는 것 보다 더 빠름
신속한 확장과 백업
- 클라우드 기반이다보다 필요할때마다 설정을 변경해서 db를 확장하거나 축소할 수 있다.
- s3에 자동으로 백업 데이터가 저장된다. 필요에 따라 수동으로 스냅샷을 생성해서 백업을 할 수도 있다.
PostgreSQL과 다른점
보조인덱스 없음
- 보조인덱스 작업 같이 소규모 OLTP 처리에 적합한 postgreSQL 기능은 성능개선을 위해 제외
지원하지 않는 쿼리 형식
- ALTER COLUMN 타입의 명령 불가
- ADD COLUMN은 각 ALTER TABLE명령 당 한개 컬럼만 가능
- INSERT, UPDATE, DELETE 사용 시 WITH caluse를 지원하지 않음
OLTP-OLAP
- OLTP DB는 주로 서비스 운영에 활용되는 데이터베이스이며, ROW 단위 UPDATE와 INSERT가 잦은 서비스 형태로 사용된다.
- OLAP DB는 상대적으로 큰 규모의 데이터에 분석적인 쿼리, aggregation을 위한 무거운 쿼리가 요구된다.
- 당연히 Redshift는 OLAP 목적으로 사용된다.
참고