0Pricing
SQL Academy · 강의

범위, 목록, 해시 파티셔닝

시계열에는 범위, 테넌트에는 목록, 균등한 분산에는 해시를 사용하는 등 적절한 파티셔닝 전략을 선택해보세요.

범위, 목록, 해시 파티셔닝은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

범위 파티셔닝

각 파티션은 연속된 값의 범위를 담당합니다. 시계열 데이터에 가장 흔히 사용됩니다.

CREATE TABLE events (
  id BIGSERIAL,
  ts TIMESTAMPTZ NOT NULL,
  data JSONB
) PARTITION BY RANGE (ts);

CREATE TABLE events_2024_q1 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');
CREATE TABLE events_2024_q2 PARTITION OF events
  FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

범위 경계는 반열린 구간입니다

FROM은 포함되고 TO는 포함되지 않습니다. 따라서 경계가 깔끔하게 맞아 겹침이나 누락이 없습니다.

목록 파티셔닝

각 파티션은 특정 값을 저장합니다.

CREATE TABLE customers (
  id BIGSERIAL,
  country TEXT NOT NULL,
  name TEXT
) PARTITION BY LIST (country);

CREATE TABLE customers_us PARTITION OF customers FOR VALUES IN ('US');
CREATE TABLE customers_eu PARTITION OF customers FOR VALUES IN ('DE','FR','IT','ES','NL');
CREATE TABLE customers_other PARTITION OF customers DEFAULT;

DEFAULT 파티션

다른 어떤 파티션과도 일치하지 않는 행을 저장합니다. DEFAULT 파티션이 없으면 일치하는 파티션이 없는 행의 INSERT가 실패합니다.

해시 파티셔닝

행을 파티션 키의 해시값에 따라 분산합니다. 균등한 분포를 원하지만 자연스러운 범위나 목록이 없을 때 적합합니다.

CREATE TABLE sessions (
  id UUID,
  user_id BIGINT,
  data JSONB
) PARTITION BY HASH (user_id);

CREATE TABLE sessions_0 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_1 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_2 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_3 PARTITION OF sessions FOR VALUES WITH (MODULUS 4, REMAINDER 3);

전략 선택

  • 범위 — 시계열 데이터, 단조롭게 증가하는 ID
  • 목록 — 테넌트, 국가, 자주 사용하는 계층
  • 해시 — 자연스러운 편중이 없고 병렬 처리만 원할 때

하위 파티셔닝

파티션 자체를 다시 파티션으로 나눌 수 있습니다(다단계 파티셔닝).

CREATE TABLE events_2024 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')
  PARTITION BY HASH (user_id);
-- 2024 is a yearly range partition, internally hashed by user_id.

파티션 테이블의 인덱스

부모에 만든 인덱스는 모든 파티션에 자동으로 전파됩니다. UNIQUE 제약 조건에는 파티션 키가 포함되어야 합니다.

CREATE INDEX events_user_idx ON events (user_id);
-- Creates one index per partition automatically.

ALTER TABLE events ADD CONSTRAINT events_uniq UNIQUE (id, ts);
-- ts must be in the constraint because it's the partition key.

기본 키와 파티션

파티션 테이블의 PRIMARY KEY에는 파티션 열이 포함되어야 합니다. 이는 선언적 파티셔닝의 기본적인 제약 조건입니다.

파티션 추가 및 삭제

비용이 저렴한 작업입니다.

CREATE TABLE events_2024_q3 PARTITION OF events
  FOR VALUES FROM ('2024-07-01') TO ('2024-10-01');

DROP TABLE events_2023_q1;
-- Instant; equivalent to deleting all old data.

파티션 자동 생성

Postgres는 앞으로 사용할 파티션을 자동으로 만들지 않습니다. 일반적인 해결 방법은 다음과 같습니다.

  • pg_partman 확장 — 월별 파티션을 관리합니다.
  • 다음 파티션을 CREATE하는 예약 작업

외래 키

파티션 테이블을 참조하는 FK에는 PG 12 이상이 필요합니다. 파티션 테이블에서 일반 테이블을 참조하는 FK는 정상적으로 작동합니다.

요약

세 가지 파티셔닝 전략으로 대부분의 사례를 처리할 수 있습니다.

  • 시간 또는 순차 데이터에는 범위
  • 이산적인 집합에는 목록
  • 균등한 분산에는 해시
  • PK에는 파티션 열이 포함되어야 함

빠른 확인

user_id를 기준으로 sessions 테이블을 균등하게 분산하고 자연스러운 순서가 없도록 파티션을 나누려고 합니다. 어떤 전략을 사용하시겠습니까?

자주 묻는 질문

“범위, 목록, 해시 파티셔닝” 강의는 무료인가요?

네 — “범위, 목록, 해시 파티셔닝” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“범위, 목록, 해시 파티셔닝”에서 뭘 배우나요?

시계열에는 범위, 테넌트에는 목록, 균등한 분산에는 해시를 사용하는 등 적절한 파티셔닝 전략을 선택해보세요. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“범위, 목록, 해시 파티셔닝” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 파티션을 사용하는 이유: 가지치기와 유지 관리
  2. 범위, 목록, 해시 파티셔닝
  3. 파티션 분리 및 연결
  4. 파티션 전체를 효율적으로 조회하기
← SQL Academy(으)로 돌아가기