docs(content-ranking): 랭킹 시간 정책 DDL을 기록한다

This commit is contained in:
2026-06-24 22:33:26 +09:00
parent ce2b628cc2
commit cdfdf0c530

View File

@@ -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);