系统设计审阅稿 v0.8.1#
2026-09-13 · 对应每日规则1.5。这是本版设计审阅入口;已有录像服务端首阶段,完整账号/每日/游戏接入尚未实现。
1. 本轮变更#
本轮收紧官方录像:单段gzip最多1MiB、解压8MiB、20,000条事件,综合三段分别检查;服务端流式拒收、失败字节计额度,并限制并发/慢连接/核验CPU。双SHA-256区分规范原文与压缩传输包,上传前按本人对局查重,已有有效Redis文件直接复用,进行中复用原任务。具体阈值为待测初值,超限不取消已经确认的通关经验,见上传防护与去重。
启用Redis,仅用于每日四榜缓存和官方录像/播放块。录像文件、gzip正文、播放块不进SQLite;DB保留成绩、四榜快照、录像key/hash/尺寸/截止/验证状态等小元数据。个人收藏和未提交草稿仍仅本机,直播与PVP仍不在本版范围。
录像写Redis时原子附绝对TTL,到期自动消失;不写录像到期清理job,不依赖过期通知。观看、重试与跨榜引用不滑动续期。为避免日切筛选任务,曾准备公开的旧段也保留到原public_until,不能只按最终60段估算内存。
榜单DB先commit再填Redis缓存,miss可重建;正文先Redis确认再由DB发布,两个存储没有共同事务。Redis正文丢失不能从SQLite恢复,因此推荐持久卷/AOF、关键写入WAITAOF确认和noeviction,Redis不可用时榜单回源DB、录像操作显示暂不可用。
参考表数仍为59张(35+24),仅将三张录像表的正文列替换为Redis元数据。设计版本0.8.1;首阶段代码可初始化同结构SQLite及接收候选文件,未接入游戏、未部署生产Redis。详细可先看Redis部分。
2. 当前完整范围#
| 系统 | 本版方案 |
|---|---|
| 账号 | 本地档案、云游客、账号密码注册;未来SSO预留身份模型,游客可先游玩 |
| 离线游玩 | 经典/自定义/已安装关卡与已下载历史每日可离线;今天每日必须联网 |
| 成长同步 | 按对局事实入账;独立新局都累计,同一局/同日权益去重;等级由经验门槛计算,局中不因升级补血 |
| 每日出题 | 服务器统一生成、独立验证、固定版本发布;客户端不生成今天每日,隐藏地图不下发 |
| 四榜 | 初级/中级/高级各Top10,加综合Top10;单项取该档最佳无伤用时,综合取三档最佳之和 |
| 入榜 | 成绩预选→授权上传缺失压缩记录→重演核验→再次比较→原子发布;候选不占名次 |
| 录像 | 单项1段、综合3段;按对局共享,个人收藏录像始终仅本机;官方候选记录有独立受控上传用途 |
| 跨设备 | 同账号关联各档成绩,各来源设备可分别上传;已核验段直接复用,不要求一台设备持有三段 |
| 日切 | UTC换日(北京时间08:00)四榜统一冻结,截止前必须完成核验发布;历史不补录/不递补 |
| 观看 | 当天按当前设计有通关门槛及观看锁;历史Top10录像取消通关限制,不锁今天 |
| 安全 | 服务端时间/状态/合法输入、去重账本、哈希锚点、录像重演与复核;离线自报成长不等于防作弊认证 |
| 存储 | 客户端IndexedDB,SQLite存业务与元数据,Redis存每日缓存和录像TTL;最终最多40席/60份引用,但Redis容量含曾入榜/孤儿/暂存/播放块 |
3. 建议重点审阅#
以下是现行方案中影响体验的规则和建议,不是要求中断其他设计工作的审批流程。
| 审阅点 | 当前设计 | 需要理解的体验后果 |
|---|---|---|
| 跨端缺录像 | 沿用任一榜候选后上传;没有默认启用服务器全程临时存证 | 若单项未上传、综合后来入围,而原设备离线,需等原设备在截止前补齐;不能承诺四榜彻底解决跨端缺段 |
| 当天观看门槛 | 仍采用三档经服务器确认完成后才看当天回放的建议 | 单项能早入榜,但不因此提前看到中高级答案;历史回放没有这项门槛 |
| 当天观看锁 | 观看今天其他玩家的回放后,锁住该日期四榜新增成绩的建议 | 先展示告知;列表不锁;已释放画面但未确认显示时进入待确认,不靠刷新解除 |
| 截止 | 通关、上传、核验、发榜均须日内完成 | 临近08:00要预留处理时间;未验完不能次日补榜 |
| Redis唯一正文副本 | AOF持久化+noeviction,关键写确认;建议Redis7.2+ | 缓存能从DB恢复,录像不能;故障时名次仍在,播放暂不可用 |
| 自动过期范围 | 无录像到期清理job;曾准备公开的段保留固定public_until | 比只留最终Top10占更多内存;其它账号/同步/验证任务仍保留 |
| 回放保留期 | 原题日结束后30天,建议值[待确认][待测试] | 到期名次仍在,录像显示过期;被多榜引用不重复延长 |
| 正式重连/容量参数 | 单次60秒、累计90秒、单档60分钟等为建议[待确认][待测试] | 需要真实网络/游戏测试;当前不作为上线性能承诺 |
服务器临时存证是曾讨论的替代方案,尚未作为当前上传策略启用。文档将这一点保留为明确的跨设备边界,避免把建议误写成用户已经确认的需求。
4. 阅读顺序#
- 总体架构:先确认账号、联网/离线和数据归属。
- 四榜规则:确认排名计算、刷榜反馈、跨端缺段和共享回放。
- 经验与防作弊:确认多端合并、升级和信任边界。
- 基础API及每日/回放API:审阅客户端与服务端职责。
- 表与事务、基础DDL和在线DDL:审阅持久化、唯一键、回执和冻结事务。
- Redis设计:审阅key、TTL、两库一致性、内存与持久化故障。
- 验收矩阵:确认70项端到端场景覆盖本版规则。
5. 检查记录#
SQLite 3.40.1:python3 docs/account-system/verify_schema.py的50项约束检查通过,验证三张录像表只有元数据、不含录像BLOB。Redis 8.0.3:python3 docs/account-system/verify_redis.py的8项原语检查通过,使用/tmp临时实例和Unix socket,未连接已有实例,结束后关闭并清理。
Redis检查覆盖二进制原样保存、写入带TTL、过期无需job、重试不续期、内容不可替换、固定公开截止、跨日拒绝提升、WAITAOF与noeviction配置。未完成两库故障注入、实际业务压测、地图与录像重演引擎测试;70项端到端场景仍待实现后运行。
6. 变更记录#
| 版本 | 日期 | 变化 |
|---|---|---|
| 0.8.1 | 2026-09-13 | 收紧录像大小/事件上限;双hash上传前去重;补流式拒收、配额、慢连接及验证资源保护 |
| 0.8.0 | 2026-09-13 | Redis限每日榜单缓存与官方录像TTL存储;录像正文移出SQLite,不设录像到期清理job;补跨库故障与持久化边界 |
| 0.7.0 | 2026-09-13 | 建立集中审阅入口;移除直播,汇总本版范围、参数建议和跨设备边界 |