1. Redshift의 특징
2. Redshift는 SQL 기반 관계형 데이터베이스
3. Redshift의 스케일링 방식
4. Redshift의 레코드 분배와 저장 방식
노드 : 분산 컴퓨팅에서 노드는 네트워크에 연결된 개별 컴퓨터나 장치를 의미. 각각의 노드는 네트워크의 일부로서 데이터를 처리하고 다른 노드와 통신할 수 있다.
Amazon Redshift는 데이터 웨어하우스 서비스로, 큰 규모의 데이터 세트를 효율적으로 분석할 수 있도록 설계된 클라우드 기반 솔루션이다. Redshift에서는 테이블의 데이터를 노드 간에 분배하는 몇 가지 방식을 제공하는데, 이를 "분배 스타일(Distribution Style)"이라고 한다. 각 분배 스타일은 데이터의 배치와 쿼리 성능에 영향을 미친다. 주요 분배 스타일은 ALL, EVEN, KEY 세 가지이다.
- ALL (전체 분배)
ALL 분배 스타일은 테이블의 모든 데이터를 클러스터의 모든 노드에 복사하여 저장한다. 이 방식은 조인이 자주 일어나는 작은 참조 테이블에 적합하다. 각 노드에 데이터가 전체적으로 복사되기 때문에 네트워크를 통한 데이터 전송이 필요 없어서 조인 성능이 향상된다. 그러나 테이블 크기가 크면 많은 저장 공간을 차지하고, 데이터 로드 시간도 길어질 수 있다.
- EVEN (균등 분배)
EVEN 분배 스타일은 테이블의 행을 클러스터 내의 모든 노드에 균등하게 분배한다. 특정 행을 특정 노드에 할당하는 것이 아니라, 순차적 혹은 무작위로 데이터를 분배한다. 이 방식은 분배 키를 선택할 수 없거나 특정 키에 따른 데이터 편향이 예상될 때 유용하며, 데이터를 균등하게 분배하여 각 노드의 작업 부하를 균일하게 유지할 수 있다.
- KEY (키 분배)
KEY 분배 스타일은 특정 컬럼(분배 키)의 값을 기준으로 데이터 행을 분배한다. 분배 키로 사용된 컬럼의 값에 따라 각 행이 특정 노드에 할당된다. 이 방식은 자주 조인되는 컬럼을 분배 키로 선택할 때 유리하고, 조인 수행 시 네트워크를 통한 데이터 이동이 적어서 조인 성능이 향상되지만, 분배 키의 값 분포가 불균형하면 특정 노드에 데이터가 집중되어 성능 저하가 발생할 수 있다. 각 분배 스타일은 테이블의 크기, 조인 패턴, 쿼리 성능 요구 사항 등에 따라 적절히 선택되어야 한다.
Load skew : 특정 노드나 서버에 작업의 대부분이 집중되어 다른 노드들보다 훨씬 많은 부하를 겪는 상황
Data skew : 데이터가 분산 시스템 내의 노드나 파티션 간에 고르지 않게 분배되어 일부 노드에 데이터가 과도하게 집중되는 현상. 이로 인해 일부 노드는 과부하 상태가 되며, 전체 시스템의 성능이 저하될 수 있다.
Redshift의 레코드 분배와 저장 방식 예
CREATE TABLE my_table (
column1 INT,
column2 VARCHAR(50),
column3 TIMESTAMP,
column4 DECIMAL(18,2)
) DISTSTYLE KEY DISTKEY(column1) SORTKEY(column3);
# my_table의 레코드들은 column1의 값을 기준으로 분배되고,
같은 노드(슬라이스)안에서는 column3의 값을 기준으로 소팅이 됨
4. Redshiftt의 벌크 업데이트 방식 - COPY SQL
5. Redshift의 데이터 타입
기본 데이터 타입
• SMALLINT (INT2)
• INTEGER (INT, INT4)
• BIGINT (INT8)
• DECIMAL (NUMERIC)
• REAL (FLOAT4)
• DOUBLE PRECISION (FLOAT8)
• BOOLEAN (BOOL)
• CHAR (CHARACTER) * redshift의 char 단위는 bite
• VARCHAR (CHARACTER VARYING)
• TEXT (VARCHAR(256))
• DATE
• TIMESTAMP