跳轉到

D-20260811-12|作品贊助改為永久 UGC 聚合

背景與驅動力

實作同時存在兩套互不相連的「贊助榜」:共識狀態維護作品軸 top-100,但沒有產品 consumer, 並為每件作品永久保存無界贊助者集合;頁面契約另做贊助者軸榜,靠掃描會在 checkpoint 後逐出的 raw ledger log 累計。前者會丟失榜外作品歷史,後者則會隨本機 log 裁剪少算,兩者都不能作永久 支持度的權威。

考慮過的選項

  • 保留作品軸 top-100 共識榜:榜外累計被永久裁掉,且 uniqueSponsors 無界,棄。
  • 保留贊助者軸頁面榜並掃 raw log:checkpoint/LRU 裁剪後無法重建永久總額,棄。
  • 將作品聚合掛在每筆 UgcRecord,榜於查詢時排序(採納)。

決定

  • 贊助金額純燒毀,不轉入作者餘額;榜代表作品的歷來支持與能見度,不代表作者收入。
  • 每筆有效 ugc-sponsor-burn 永久更新 target UgcRecordsponsoredTotalMinor += amountsponsorEventCount += 1lastSponsoredAt 單調取最大值。
  • sponsorEventCount 計有效事件,不做 unique sponsor 計數;不保存贊助者集合,也不新增逐筆永久 贊助歷史。個別 ledger 事件仍是可逐出的暫時資料。
  • 作品榜採永久累計,查詢時掃全部 ugcRecords,依總額降序、CID 字典序平手裁決後才套 top-N。 fold 不裁剪聚合;近期發現訊號仍由 weeklyTopCreators 承擔。
  • 移除 EconomyDerivedState.sponsorshipBoardSponsorshipStatupdateSponsorshipBoardSPONSORSHIP_BOARD_LIMIT,以及人物軸 EconomyData.sponsorBoard() 與 raw-log sponsorTotals
  • state-codecUgcRecord.sponsoredTotalMinor 明確執行 bigint 歸一。專案尚未開正式鏈,直接採 新 DerivedState 形狀,不提供舊 checkpoint 缺欄 fallback 或雙讀相容層。

後果與影響

每件 UGC 只增加固定三欄,狀態大小隨作品數而非贊助者數或事件數增長;checkpoint 可完整保存榜外 作品累計。top-N 成本移到低頻查詢的 O(number of UGC) 掃描與排序,不再增加每筆 fold 的全榜排序 成本。若日後需要個別贊助歷史或贊助者榜,必須另行裁決有界持久化模型,不能從可逐出的 raw log 宣稱永久完整。