Redshift의 특징
- AWS에서 지원하는 데이터 웨어하우스 서비스
- 2PB의 데이터까지 처리 가능 : 최소 160GB로 시작해서 점진적으로 용량 증감 가능
- Still OLAP
- 응답속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용불가
- 컬럼 기반 스토리지
- 레코드 별로 저장하는 것이 아니라 컬럼별로 저장함
- 컬럼별 압축이 가능하며 컬럼을 추가하거나 삭제하는 것이 아주 빠름
- 벌크 업데이트 지원
- 레코드가 들어있는 파일을 S3로 복사 후 COPY커맨드로 Redshift로 일괄 복사
- 고정 용량/비용 SQL 엔진
- 최근 가변 비용 옵션도 제공(Redshift Serverless)
- 데이터 공유 기능 (Datashare):
- 다른 AWS계정과 특정 데이터 공유 가능. Snowflake의 기능을 따라함
- 다른 데이터 웨어하우스처럼 primary key uniqueness를 보장하지 않음
- 프로덕션 데이터베이스(ex. MySQL, Oracle...)들은 보장함
- Postgresql 8.x와 SQL이 호환됨
- 하지만 Postgresql 8.x의 모든 기능을 지원하지 않음 (ex. text타입 존재하지 않음)
- Postgresql 8.x를 지원하는 툴이나 라이브러리로 액세스 가능 (JDBC / ODBC)
- 다시한번 SQL이 메인 언어라는 점 명심
- 그래서 데이터 모델링(테이블 디자인)이 아주 중요
Redshift 스케일링 방식
- 용량이 부족할 때 마다 새로운 노드를 추가하는 방식으로 스케일링
- 예) Scale Out 방식과 Scale UP 방식
- dc2.large가 하나면 최대 0.16TB까지의 용향을 갖게됨
- 공간이 부족해지면 dc2.large한대를 더 추가 -> 총 0.32TB(Scale OUT)
- 아니면 사양을 더 좋은 것으로 업그레이드 -> dc2.8xlarge한대로 교체 (Scale Up)
- 이를 Resizing이라 부르며 Auto Scaling옵션을 설정하면 자동으로 이뤄짐
- 이는 Snowflake나 BigQuery의 방시과는 굉장히 다름
- 여기서는 특별히 용량이 정ㅎ져있지 않고 쿼리를 처리하기 위해 사용한 리소스에 해당하는 비용 지불
- 즉 Snowlake와 BigQuery가 훨씬 더 스케일하는 데이터베이스 기술이라 볼 수 있음
- 장단점 존재 -> 비용의 예측이 불가능하다는 단점 존재
Redshift의 레코드 분배와 저장 방식
- Redshift가 두 대 이상의 노드로 구성되면 그 시점부터 테이블 최적화가 중요
- 한 테이블의 레코드들을 어떻게 다수의 노드로 분배할 것이냐!
- Distkey, Diststyle, Sortkey 세 개의 키워드를 알아야함
- Diststype은 레코드 분배가 어떻게 이뤄지는지를 결정 (디폴트는 "even")
- all : 모든 노드에 같은 데이터를 저장
- even : 각 노드에 골고루 저장
- key : 특정 key(unique column)를 이용해 해당 모아서 저장
- Distkey는 레코드가 어떤 컬럼을 기준으로 배포되는지 나타냄 (diststyle이 key인 경우)
- Sortkey는 레코드가 한 노드내에서 어떤 컬럼을 기준으로 정렬되는지 나타냄
- 이는 보통 타임스탬프 필드가 됨
- Diststype은 레코드 분배가 어떻게 이뤄지는지를 결정 (디폴트는 "even")
- Diststyle이 key인 경우 컬럼 선택 잘못되면?
- key별로 분배 시 특정 key가 많으면 레코드 분포에 Skew(하나의 노드에 만 적재가 많이 되는 현상) 발생 -> 분산처리의 효율성이 사라짐
- BigQuery나 Snowflake에서는이런 속성을 개발자가 지정할 필요가 없음 (시스템이 알아서 선택)
- Redshift의 레코드 분배와 저장 방식 예
AWS Redshift Serverless 런칭 및 셋팅
- AWS Free trial 계정 생성 (3개월 동안 300달러 내로 무료사용)
- Redshift 검색 후 Redshift Serverless free trial 선택
- admin 계정 생성 : Redshift Serverless 메인 페이지 -> 네임스페이스 구성 -> 관리자 암호 변경
- 네트워크 셋팅