設計簡易的公開排行榜系統 - 透過 Parse
以下的案例是以 公開排行榜 來設計初始概念,並不夠優化在正式環境中使用。在務實上,由於排行榜的資料使用存在很大的不對稱性,所以都會設計有預先計算以及快取的機制,來避免浪費大量的運算資源來 重複讀取 變動性不大的資訊
Leaderboard 排行榜資料表設計
欄位
類型
解釋
範例
ID
String
排行榜 ID,供辨識使用
leaderboard_hunt_master
NAME
String
顯示的名稱
leaderboard_highest_score_name 多國語系鍵值,可於字串映射檔轉譯 最高分榜
ICON
File
圖示
< File Object >
IS_PUBLIC
Bool
是否為公開排行榜
True
DESCENDING
Bool
排名方式以數值由大到小排列
True
LASTING
String
統計時段
DAILY, WEEKLY, ALL
MAX_VALUE
Number
合理數值上限
100000
MIN_VALUE
Number
合理數值下限
0.1
VALUE_TYPE
String
數值類別
NORMAL, CONCURRENCY, TIME
ORDER
Number
排行榜顯示的順序
1
APP_VERSION
Number
排行榜要求的程式版本 用來過濾舊版本程式不支援的成就 也方便開發、測試新的排行榜
1
IS_DELETE
Bool
是否已經刪除
False
多國語系的支援,可以透過本機端或是快取雲端字串映射來轉譯
新增排行榜:新增一筆排行榜的資料表,並將 APP_VERSION 設定為下一個 APP 版本編號。然後於新增多國語系的字串映射檔描述,以及結算時候的對應邏輯
修改排行榜:以此設計而言,可簡單的透過雲端資料的變更,可動態修改的欄位有:圖樣、合理數值、顯示順序...等等
移除排行榜:將排行榜 IS_DELETE 設定為 True 即可。不直接刪除,可避免部分資料相依性造成的錯誤
取得排行榜清單:將 目前程式端支援 以及 未被刪除 的排行榜取出,依照順序排列
LeaderboardRecord 排行榜紀錄表設計
欄位
類型
解釋
範例
objectId
String
此紀錄物件 ID
${OBJECT ID}
USER
String Pointer -> User
玩家 ID
user_id_terry
LEADERBOARD
String Pointer -> Leaderboard
排行榜 ID
leaderboard_hunt_master
VALUE
Number
排行數值
100
TIME
Number Date
最新記錄創造時間
${UNIX_TIMESTAMP}
取得玩家在特定排行榜自己的紀錄
取得玩家在特定公開排行榜自己的名次
DESCENDING 以 $gt 取得比自己大的數量, ASCENDING 以 $lt 取得比自己小的數量。如果是有重複性數值的排行榜,通常會另外設計一個欄位來實作雙重排序因子的計數
取得特定公開排行榜榜單
以 -VALUE 或是 VALUE 來取得 DESCENDING 與 ASCENDING 的排序。limit 與 skip 可用來作 paging
新增排行榜紀錄
更新排行榜紀錄
Last updated