InfoGrab DocsInfoGrab Docs

날짜 범위 파티셔닝

GitLab 데이터베이스에서 날짜 범위 기반 테이블 파티셔닝을 구성하고 마이그레이션하는 방법을 설명합니다.

날짜 범위 파티셔닝 # 설명 # GitLab 마이그레이션 헬퍼가 가장 잘 지원하는 방식은 날짜 범위 파티셔닝(date-range partitioning)으로, 테이블의 각 파티션이 단일 월의 데이터를 포함합니다. 이 경우 파티셔닝 키는 타임스탬프 또는 날짜 칼럼이어야 합니다. 이 유형의 파티셔닝이 제대로 작동하려면 대부분의 쿼리가 특정 날짜 범위의 데이터에 접근해야 합니다. 더 구체적인 예시로, audit_events 테이블 사용을 고려해 보겠습니다. 이 테이블은 애플리케이션 데이터베이스에서 파티셔닝된 최초의 테이블입니다. 이 테이블은 애플리케이션에서 발생하는 보안 이벤트의 감사 항목을 추적합니다. 거의 모든 경우에 사용자는 특정 시간대에 발생한 감사 활동을 확인하고자 합니다. 따라서 날짜 범위 파티셔닝은 데이터 접근 방식에 자연스럽게 적합했습니다. 이를 더 자세히 살펴보기 위해, 단순화된 audit_events 스키마를 상상해 보겠습니다: CREATE TABLE audit_events ( id SERIAL NOT NULL PRIMARY KEY, author_id INT NOT NULL, details jsonb NOT NULL, created_at timestamptz NOT NULL); 이제 UI의 일반적인 쿼리가 특정 날짜 범위(예: 단일 주)의 데이터를 표시한다고 가정해 보겠습니다: SELECT * FROM audit_events WHERE created_at >= '2020-01-01 00:00:00' AND created_at < '2020-01-08 00:00:00' ORDER BY created_at DESC LIMIT 100 테이블이 created_at 칼럼으로 파티셔닝되면 기본 테이블은 다음과 같습니다: CREATE TABLE audit_events ( id SERIAL NOT NULL, author_id INT NOT NULL, details jsonb NOT NULL, created_at timestamptz NOT NULL, PRIMARY KEY (id, created_at)) PARTITION BY RANGE(created_at); 파티셔닝된 테이블의 기본 키는 기본 키 정의의 일부로 파티션 키를 포함해야 합니다. 그리고 테이블에 대한 파티션 목록은 다음과 같을 수 있습니다: audit_events_202001 FOR VALUES FROM ('2020-01-01') TO ('2020-02-01') audit_events_202002 FOR VALUES FROM ('2020-02-01') TO ('2020-03-01') audit_events_202003 FOR VALUES FROM ('2020-03-01') TO ('2020-04-01') 각 파티션은 기본 audit_events 테이블과 동일한 구조를 가진 별도의 물리적 테이블이지만, 파티션 키가 지정된 범위에 속하는 행의 데이터만 포함합니다. 예를 들어, audit_events_202001 파티션은 created_at 칼럼이 2020-01-01 이상이