From cdfdf0c530afe4b3ed1cc923934199c8a647bbc9 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 24 Jun 2026 22:33:26 +0900 Subject: [PATCH] =?UTF-8?q?docs(content-ranking):=20=EB=9E=AD=ED=82=B9=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=A0=95=EC=B1=85=20DDL=EC=9D=84=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../create-ranking-tables.sql | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/docs/20260608_크리에이터_랭킹/create-ranking-tables.sql b/docs/20260608_크리에이터_랭킹/create-ranking-tables.sql index 49d77902..65c9b93c 100644 --- a/docs/20260608_크리에이터_랭킹/create-ranking-tables.sql +++ b/docs/20260608_크리에이터_랭킹/create-ranking-tables.sql @@ -59,3 +59,72 @@ create index idx_creator_ranking_snapshot_job_period_status create index idx_creator_ranking_snapshot_job_status_created_at on creator_ranking_snapshot_job (status, created_at); + +-- 이미 위 CREATE DDL이 적용된 DB의 시간 정책 변경용 DDL +-- 목적: +-- 1. 현재 기본 랭킹 타입(WEEKLY)을 명시한다. +-- 2. 공개 조회 노출 시작 시각(visible_from_at)을 저장한다. +-- 3. 최신 생성 스냅샷이 아니라 visible_from_at <= now 조건의 최신 공개 스냅샷을 조회할 수 있게 인덱스를 보강한다. +-- 주의: +-- 운영 DB 반영 시 중복 스냅샷이 있으면 uk_creator_ranking_snapshot_period_creator 생성 전 정리한다. +-- visible_from_at backfill 기준은 aggregation_end_at_utc + 9시간이다. +-- 예: 2026-06-07 15:00:00 UTC 집계 종료는 2026-06-08 00:00:00 KST이고, +-- 노출 전환 2026-06-08 09:00:00 KST는 2026-06-08 00:00:00 UTC다. + +alter table creator_ranking_snapshot + add column ranking_type varchar(30) null comment '랭킹 타입(현재 WEEKLY, 향후 다중 타입 확장)' after id, + add column visible_from_at timestamp null comment '공개 조회 노출 시작 시각(UTC)' after aggregation_end_at_utc; + +update creator_ranking_snapshot +set ranking_type = 'WEEKLY' +where ranking_type is null; + +update creator_ranking_snapshot +set visible_from_at = timestampadd(hour, 9, aggregation_end_at_utc) +where visible_from_at is null; + +alter table creator_ranking_snapshot + modify column ranking_type varchar(30) not null comment '랭킹 타입(현재 WEEKLY, 향후 다중 타입 확장)', + modify column visible_from_at timestamp not null comment '공개 조회 노출 시작 시각(UTC)'; + +create unique index uk_creator_ranking_snapshot_period_creator + on creator_ranking_snapshot (ranking_type, aggregation_start_at_utc, aggregation_end_at_utc, creator_id); + +drop index idx_creator_ranking_snapshot_period_score on creator_ranking_snapshot; + +create index idx_creator_ranking_snapshot_period_score + on creator_ranking_snapshot (ranking_type, aggregation_end_at_utc, final_score desc); + +create index idx_creator_ranking_snapshot_visible_score + on creator_ranking_snapshot (ranking_type, visible_from_at desc, final_score desc); + +drop index idx_creator_ranking_snapshot_replace_period on creator_ranking_snapshot; + +drop index idx_creator_ranking_snapshot_period_creator on creator_ranking_snapshot; + +alter table creator_ranking_snapshot_job + add column ranking_type varchar(30) null comment '랭킹 타입(현재 WEEKLY, 향후 다중 타입 확장)' after id, + add column visible_from_at timestamp null comment '공개 조회 노출 시작 시각(UTC)' after aggregation_end_at_utc; + +update creator_ranking_snapshot_job +set ranking_type = 'WEEKLY' +where ranking_type is null; + +update creator_ranking_snapshot_job +set visible_from_at = timestampadd(hour, 9, aggregation_end_at_utc) +where visible_from_at is null; + +alter table creator_ranking_snapshot_job + modify column ranking_type varchar(30) not null comment '랭킹 타입(현재 WEEKLY, 향후 다중 타입 확장)', + modify column visible_from_at timestamp not null comment '공개 조회 노출 시작 시각(UTC)'; + +drop index idx_creator_ranking_snapshot_job_period_status on creator_ranking_snapshot_job; + +create index idx_creator_ranking_snapshot_job_period_status + on creator_ranking_snapshot_job (ranking_type, aggregation_start_at_utc, aggregation_end_at_utc, status); + +create index idx_creator_ranking_snapshot_job_visible_status + on creator_ranking_snapshot_job (ranking_type, visible_from_at, status); + +create index idx_creator_ranking_snapshot_job_trigger_period + on creator_ranking_snapshot_job (ranking_type, aggregation_start_at_utc, aggregation_end_at_utc, trigger_type, created_at);