docs(content-ranking): 랭킹 시간 정책 DDL을 기록한다
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user