D-20260811-12|作品贊助改為永久 UGC 聚合¶
背景與驅動力¶
實作同時存在兩套互不相連的「贊助榜」:共識狀態維護作品軸 top-100,但沒有產品 consumer, 並為每件作品永久保存無界贊助者集合;頁面契約另做贊助者軸榜,靠掃描會在 checkpoint 後逐出的 raw ledger log 累計。前者會丟失榜外作品歷史,後者則會隨本機 log 裁剪少算,兩者都不能作永久 支持度的權威。
考慮過的選項¶
- 保留作品軸 top-100 共識榜:榜外累計被永久裁掉,且
uniqueSponsors無界,棄。 - 保留贊助者軸頁面榜並掃 raw log:checkpoint/LRU 裁剪後無法重建永久總額,棄。
- 將作品聚合掛在每筆
UgcRecord,榜於查詢時排序(採納)。
決定¶
- 贊助金額純燒毀,不轉入作者餘額;榜代表作品的歷來支持與能見度,不代表作者收入。
- 每筆有效
ugc-sponsor-burn永久更新 targetUgcRecord:sponsoredTotalMinor += amount、sponsorEventCount += 1,lastSponsoredAt單調取最大值。 sponsorEventCount計有效事件,不做 unique sponsor 計數;不保存贊助者集合,也不新增逐筆永久 贊助歷史。個別 ledger 事件仍是可逐出的暫時資料。- 作品榜採永久累計,查詢時掃全部
ugcRecords,依總額降序、CID 字典序平手裁決後才套 top-N。 fold 不裁剪聚合;近期發現訊號仍由weeklyTopCreators承擔。 - 移除
EconomyDerivedState.sponsorshipBoard、SponsorshipStat、updateSponsorshipBoard、SPONSORSHIP_BOARD_LIMIT,以及人物軸EconomyData.sponsorBoard()與 raw-logsponsorTotals。 state-codec對UgcRecord.sponsoredTotalMinor明確執行 bigint 歸一。專案尚未開正式鏈,直接採 新 DerivedState 形狀,不提供舊 checkpoint 缺欄 fallback 或雙讀相容層。
後果與影響¶
每件 UGC 只增加固定三欄,狀態大小隨作品數而非贊助者數或事件數增長;checkpoint 可完整保存榜外
作品累計。top-N 成本移到低頻查詢的 O(number of UGC) 掃描與排序,不再增加每筆 fold 的全榜排序
成本。若日後需要個別贊助歷史或贊助者榜,必須另行裁決有界持久化模型,不能從可逐出的 raw log
宣稱永久完整。