四服合一时排行榜串了档:137 个跨服同名玩家在榜单上互相覆盖,89 条榜单数据张冠李戴,榜三的裁决之杖图片下面挂的是别人的名字。根因是榜单以名字为键合并,重名即覆盖。复盘把合服流程补上重名检测、改名迁移、按角色 ID 重建三道工序。合服是数据事故的高发场景,两套历史数据叠加时任何按名字做的键都有碰撞风险,这次只是其中一例。
合服前对四服名册做跨服重名检测,命中者按来源服号追加后缀改名,邮件附赠改名卡与调整说明,改名映射落库留痕。
local function markRename(nm, serverId)
local newName = nm .. "S" .. serverId
setsysvarex("RENAME_" .. serverId .. "_" .. nm, newName, 1)
sendmail("#" .. nm, 930, "合服改名通知",
"因跨服重名,您的名字调整为 " .. newName .. ",随信附改名卡一张", "改名卡x1")
return newName
end
榜单废弃名字键,重建时以角色 ID 为主键,排序以等级为主、战力为次级键,同名不同人从此各占其位。
local function rebuildRank(entries)
table.sort(entries, function(a, b)
if a.lv ~= b.lv then return a.lv > b.lv end
return a.power > b.power
end)
for rank, e in ipairs(entries) do
if rank > 100 then break end
setsysvarex("RANK_LV_" .. rank, e.roleId .. "|" .. e.nm .. "|" .. e.lv, 1)
end
end
合服预演环境全量跑一遍:137 个重名全部完成改名迁移,邮件送达率百分之百;榜单重建后逐条核对名字、等级、角色 ID 三元组;好友与邮件系统的名字引用同步扫描更新。监控合服后 72 小时的改名相关工单量,工单集中说明通知触达有漏。
重名检测只比对了玩家名,行会名也有 11 对重名,行会频道的消息串到了别的行会,第二遍扫描补上行会名清单。改名邮件发得早,玩家在合服窗口期还用旧名字登录,名实不符持续了半小时,改名的生效时间点对齐到合服切换瞬间。榜单并列等级没设次级键,同名次出现两个,取战力做次级键。重建脚本跑了 40 分钟超出合服窗口,快照先行、窗口内只做文件级切换,重建挪到切换后异步执行。合服后好友列表里仍挂着旧名字,点开找不到人,全局名字映射表上线后才把引用链全部捋顺。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 付费玩家的付费点集中在商城,成长线里缺一个长期投入的钩子。成长基金让玩家在低等级时一次性买入,随等级提升…
实战应用:用在哪里 行会联赛打得不热闹,观战人数不到参赛人数的一半。联赛竞猜给观战者一张入场券:用竞猜币押注胜负,赔率随投注…
实战应用:用在哪里 七夕限时活动原计划七天,上线第二天下午整点活动面板突然关闭,奖励领了一半,玩家以为被砍了福利,两小时内工…
实战应用:用在哪里 HTTPS 证书过期一次,全服登录白屏了半个多小时,值班才发现证书没人管。证书续期机制把到期日写进系统变…
实战应用:用在哪里 从行会面板点进成员列表再点开个人名片,连按返回键直接退回了主城,中间两层界面全部跳过。界面堆栈管理用一张…
实战应用:用在哪里 限时商城的稀缺商品上架即被抢,玩家错过窗口感觉被区别对待。商城橱窗把每件限时商品的下架时间做成可视化倒计…