题王 QKing 局域网答题系统 · 软件说明书
第 9 章

性能与容量

其他容量参考:单场班级人数 50–60 人无压力;账号量级测试至 525 账号、3,250 条作答明细;导入批次按 200 行分块提交,万行级名单导入通常在秒级完成。

9.1 性能设计要点

设计点 说明
端点并发模型 纯同步数据库/磁盘操作的路由一律声明为同步 def,由 FastAPI 自动放入线程池执行,不阻塞事件循环;避免"导出题库/整库自检时全站卡死"
静态资源 全站静态资源带 gzip 与 max-age=86400 长缓存,URL 附带 ?v=静态版本号(取 static 目录最新修改时间),改文件重启即自动击穿旧缓存
前端重型组件懒加载 富文本编辑器(约 1.3MB)、Excel 判分引擎(约 2.6MB)、Pyodide、CodeMirror 均按需加载
轮询自适应 页面不可见(document.hidden)时暂停轮询,回到前台立即补刷;极低配设备可放宽刷新间隔
服务端分页 题库列表等长列表接口在大数据量下走服务端分页,前端只渲染可视范围
索引支撑 场次排行榜 idx_su_sess_score(session_id, score)、作答明细 idx_att_*、题目 idx_qbq_* 等索引支撑高频查询
数据库调优 WAL 日志模式 + synchronous=NORMAL + temp_store=MEMORY + cache_size=4MB + mmap_size=64MB + busy_timeout=30s

9.2 容量建议(单机 / 局域网 / SQLite)

题量规模 体验 说明
≤1,000 题 无压力 当前真实库约 917 题
1 万 ~ 2 万题 仍流畅 全量类接口(导出包、全选 ID)响应上百毫秒
≥5 万题 全量类操作到秒级 建议避开上课时段做整库级操作

其他容量参考:单场班级人数 50–60 人无压力;账号量级测试至 525 账号、3,250 条作答明细;导入批次按 200 行分块提交,万行级名单导入通常在秒级完成。

9.3 关键参数表

实时答题

参数 值
每题分值 SCORE_PER_QUESTION 10 分
抢答答错扣分 WRONG_PENALTY 5 分
抢答作答窗口 BUZZ_ANSWER_SEC 10 秒
在线判定窗口 ONLINE_SECONDS 30 秒
切走(away)失联兜底 AWAY_STALE_SEC 120 秒
心跳写库节流 HB_WRITE_SEC 10 秒
每题限时默认 0(不限时),由主持台设置

限流与安全

参数 值
账号连续失败锁定 LOCK_FAILS / LOCK_SECS 5 次 / 300 秒
IP 维度失败上限 IP_MAX_FAILS / 窗口 IP_WINDOW_SECS 20 次 / 300 秒
IP 追踪表上限 IP_MAX_TRACKED 2,000 条
单账号同时在线会话 MAX_SESSIONS 10
会话有效期 SESSION_DAYS 30 天
会话 Cookie 名 qt(HttpOnly、SameSite=lax)
初始口令清单可下载时长 30 天
学校入驻申请限流 5 次 / 窗口

上传与内容限制

项目 上限
请求体大小(按前缀) /api/qbank/import_pack 512MB;/api/import/* 128MB;/api/excel/* 64MB;/api/qbank/* 32MB;其它 /api/* 16MB
题干图片 5MB(png/jpg/jpeg/gif/webp)
题库包解压保护 最多 5,000 个成员、累计 500MB
表格题模板 / 考点 JSON / 判分脚本 / 学生作答 20MB / 5MB / 2MB / 20MB
表格题明细入库 detail 200KB、subs 64KB
编程题用例数 ≤50 组;超时 1–60 秒
编程题沙箱 2,000,000 步 / 5.0 秒 / 100,000 字符输出

分页与批量

项目 值
题库列表 limit 强制上限 1,000
记录/统计列表 limit 上限 100
分组批量查询 每 300 / 400 条一批
导入提交批次 每 200 行一个子检查点

日志与进程

项目 值
日志轮转 单文件 2MB,保留 5 份
端口策略 固定端口、绝不顺延、单实例
单实例检测 GET /api/svc/ping(app="quiz-lan")