00 개요
- 회사에서 코드분석 하는데 VIEW를 만들길래 이것이 뭔가 하고 정리하고자 함
01 Projection이란
1. Projection 정의 (테이블과 프로젝션)
- Vertica의 테이블은 논리적인 구조를 정의 할 뿐 데이터를 저장하고 있지 않으며, 데이터를 저장하는 곳은 Projection이라는 물리적인 구조임
- 테이블당 복수 개의 projection을 생성 가능
- 전체 컬럼을 가지는 projection이 반드시 하나 존재해야 하며(super projection), 테이블의 컬럼을 일부만 가지고 projection도 생성 가능
- 또한 테이블과 다른 정렬순서로 데이터를 저장 가능
- 정렬은 항상 ASC(오름)로 정렬됨
- 버티카에서는 table을 anchor table이라고 부르기도 함
2. Projection 생성되는 시기
- Vertica에서 Projection이 생성되는 시기는 다음과 같은 경우에 자동 / 명시적으로 생성됨
- 테이블 생성 후 처음으로 데이터가 저장될 때 (자동)
- 명시적으로 프로젝션을 생성할 때 (CREATE PROJECTION)
- 테이블을 생성할 때 프로젝션 속성을 함께 지정할 때 (e.g., Segment, Order, Ksafe )
3. 기본 Projection 유형
projection 유형 | 설명 |
Super Projection | - anchor table의 모든 컬럼을 포함하고 있는 프로젝션 - 반드시 1개 이상 존재 필수 |
Query-Specific Projection | - anchor table의 컬럼들 중 부분 집합을 포함하는 프로젝션 - 쿼리의 성능을 최적화하기 위해 생성 |
Aggregate Projections | - SUM 및 COUNT와 같은 식 또는 집계 함수가 포함된 쿼리를 이용해서 미리 집계한 데이터를 저장하는 프로젝션 - 데이터가 적재되면서부터 집계되어 저장되므로 대량의 데이터에 대한 쿼리의 경우 효율적 |
Buddy Projection | - 프로젝션 속성의 K-Safe로 데이터를 이중화/삼중화할 때 다른 노드에 복제되는 프로젝션 |
- Vertica에서는 하나의 테이블에 Projection 2~4개 이내로 만드는 것 권장
- Super Projection 1~2개, Query-specific Projection 2~3개 이내
- Projection에는 실제 데이터가 저장되므로 무분별한 Projection 사용은 적재 속도에 영향을 주며, 디스크 공간을 비효율적으로 사용하게 됨
4. Projection Replication vs Segmentation (복제 vs 분산)
1) Projection Replication (프로젝션 복제)
- Projection Replication이란 클러스터의 모든 노드들이 동일한 데이터 복사본을 가지고 있는 것
- Dimension 테이블과 같은 작은 테이블에 쓰이며, JOIN시 유용
- 각 노드에 데이터를 저장하므로 JOIN이 로컬에서 일어나 JOIN 성능을 높일 수 있음
- 한 노드가 중단되더라도 다른 노드에 동일한 데이터가 존재하므로 서비스를 지속할 수 있음
2) Projection Segmentation (프로젝션 분산)
- Projection Segmentation이란 fact 테이블과 같은 큰 테이블에 대한 데이터를 클러스터 노드 전체에 고르게 분산시키는 것
- 이렇게 분산시키므로서 각 노드별로 데이터를 고르게 가지고 있으므로 쿼리 실행 시 workload를 여러 노드로 분산 시킬 수 있음
3) Local Join
- 쿼리가 replication projection과 segmented projections에서 데이터 추출 시 projection 간의 JOIN은 각 노드에서 로컬로 수행되어 노드의 데이터만 반환됨
- 각 노드에서 조회가 완료되면 결과를 집계하여 사용자에게 반환함 → 이로인해 Vertica는 쿼리를 신속하게 처리 가능
SELECT t1.twitter_id, t2.f_name, t1.tweet
FROM TABLE1 t1
INNER JOIN TABLE2 t2
ON t1.twitter_id = t2.twitter_id;
5. K-Safety와 Buddy Projection
- K-Safety는 DB 클러스터의 내결함성 측정값
- K 값= 클러스터에 존재하는 Projection Segment의 복사본 수를 의미
- 이러한 복제본 (Buddy Projection)은 장애가 발생한 노드에 대해 다른 노드를 대신할 수 있게 하여 DB가 계속 실행되면서 데이터 무결성을 보장
- Vertica에서 가능한 K 값 = 0, 1, 또는 2
- K = 1: DB에서 노드가 하나 DOWN되어도 DB는 계속 정상적으로 실행됨, 잠재적으로, 클러스터에서 적어도 하나의 다른 노드가 DOWN된 노드의 데이터 복사본을 가지고 있는 한, DB는 계속 실행될 수 있음
- K = 0: 노드 1 또는 2로 구성됨, HA 구성 불가능
- K = 1: 노드 3개 이상 필요
- K = 2: 노드 5개 이상 필요, HA 구성 가능
참조
'DBMS > Vertica' 카테고리의 다른 글
REFRESH (프로젝션 함수) (1) | 2024.07.05 |
---|---|
Segmentation and Partitioning (0) | 2024.06.17 |
Encoding/Compression Types (인코딩/압축 종류) (1) | 2024.06.13 |
K-Safety (replica), Data Safety, Node Dependencies란 (0) | 2024.06.12 |
vsql admintools 사용하기 (0) | 2024.05.07 |