极客圈子里让一切计算设备运行 Doom 的移植游戏,最近迎来了一个真正考验算力极限的宿主。开发者 Lukas Vogel 在分析型数据库 CedarDB 内部,用纯 SQL 查询实现了 1993 原版游戏的光栅化渲染与实体逻辑。在外界看来,这像是一次数据库厂商为了展示图灵完备性的公关秀,但代码仓库里摊开的工程细节表明,这实际上是一套用关系代数对三十年前约翰·卡马克图形管线的硬核重构。
部分科技媒体在初次报道中出现了明显的参数错位,声称该项目仅靠 1300 行 SQL 就输出了 640×480 分辨率的画面。查阅开源代码与技术白皮书可以确认,这套引擎的实际画面输出规格是原汁原味的 320×200 分辨率,通过 string_agg 聚合函数向外喷吐每帧 192,000 字节的 RGB 位图。更关键的是,1300 行 SQL 和 89 个公用表表达式(CTE)仅仅承担了光栅化渲染器,真正驱动怪物 AI、武器弹道和碰撞体积的主循环逻辑,另外耗费了整整 5900 行 SQL。
关系代数重造渲染管线
原版 Doom 能够运行在 1993 年的 486 个人电脑上,核心依赖卡马克精妙的二叉空间分割树(BSP Tree)与 Visplane 算法。这套结构把三维空间按从前到后的顺序切开,确保每个屏幕像素只被绘制一次,从而规避昂贵的多边形过度绘制。但数据库执行引擎没有三维显存,只有表格与算子。
Vogel 的解法是把 BSP 树的几何切分在载入期完成预计算,为关卡内的每一段墙体生成对应的排序键。进入运行期后,原本复杂的空间遍历退化成了一条简单的 SQL 排序语句。渲染器利用 ORDER BY 算子快速剔除背向不可见的墙体表面,地板与天花板则用有序面板切片强行平铺。至于现代图形学中至关重要的深度缓冲,在 SQLDoom 内部被抽象成了一条针对整数编码的 MIN() 聚合查询,直接在关系集合中选出最近图层。
这套逻辑是 2025 年 9 月发布的 DOOMQL 项目的直接演进。在当时的前作中,系统只能借助类似德军总部 3D 的简单光线投射,吐出每秒 30 帧的灰阶 ASCII 文本字符。而到了 2026 年 9 月 22 日发表的 SQLDoom,执行器已经可以直接输出带纹理贴图的彩色位图。在一台搭载 Ryzen 7 PRO 7840U 的轻薄本上,这套纯 SQL 渲染管线在常态下能够跑出约 60 FPS,即使遇到怪物密集的复杂交火场景,帧率也能维持在约 35 FPS。
- 结论.将空间树形拓扑扁平化为带索引的排序字段,证明了现代列式或混合分析型数据库的高性能执行器足以承受逐像素级别的向量变换。
事务一致性的乌托邦与服务器算力黑洞
技术展示中最诱人的一项主张,在于数据库事务对多人联机网络同步难题的降维打击。在传统游戏服务器开发中,网络延迟补偿、客户端航位预测和并发命中仲裁是极易滋生漏洞的重灾区。开发者的设想极为理想化:如果所有玩家的操作全部打包为数据库事务快照,物理碰撞与弹道计算都在同一个事务内落盘,就不再存在任何逻辑撕裂,也不会发生火箭弹到底有没有命中目标的判决争议。
但这一论断很快在网络工程实践面前露出了破绽。数据库的快照隔离(Snapshot Isolation)仅仅解决了服务器多线程并发写内存时的脏读与竞态条件,它根本无法抹平玩家到服务器之间的实体物理延迟。当一个高延迟玩家发送射击指令时,如果后端不提供航位推测与插值回滚机制,无论底层 SQL 事务多么严丝合缝,画面依旧会发生令人不适的瞬移与卡顿。
更为残酷的是硬件资源消耗。原版游戏的模拟主循环被硬性锁定在 35 Hz,意味着留给数据库处理每一次状态迭代的时间窗口只有苛刻的 28.6 毫秒。虽然实测中单次状态模拟的典型耗时仅需 2.15 毫秒(极端峰值为 10.45 毫秒),但在联机环境下,每个玩家的独立光栅化视图都需要单独占据计算资源。为了维持 35 FPS 的渲染底线,服务器为每一个客户端分配了约 3 个独立的 CPU 核心,再加上 1 个专门驱动逻辑主循环的核心,一场区区 4 人死亡竞赛 就需要整整 16 核服务器 全力运转。
Ars Technica 记者在实测官方公网试玩环境时遭遇了糟糕的顿挫,根源并不在于 SQL 优化失灵,而在于算力撞墙。CedarDB 团队在欧美两个区域各自仅开放了 4 个联机席位,只要服务器算力被挤占饱和,后续排队的玩家就会立刻跌入严苛的性能沼泽。
私有方言牢笼与极客狂欢的边界
掀开所有炫技的外衣,SQLDoom 无法被简单归类为纯正 SQL 语言的胜利。整套项目虽然在前端兼容 PostgreSQL 的传输协议,允许使用标准的数据库驱动连接,但驱动主循环跃迁的核心逻辑深度依赖 CedarDB 自主研发的 cedarscript 扩展语言。
试图在原生 PostgreSQL 或 SQLite 上直接执行这些代码的人,无一例外会撞上语法不兼容的红墙。
这意味着该项目并非通用标准数据库的一次自然舒展,而更像是 CedarDB 研发团队为自家底层执行引擎定制的极端压力测试夹具。关系数据库的设计哲学自诞生起就是面向吞吐量优先的批处理与持久化事务,硬生生将其扭转为以毫秒计的硬实时模拟系统,本身就是一种反工程直觉的倒错。
- 风险.数据库事务虽然能完美承载游戏内实体状态的流转模型,但强制将其扩展至逐像素光栅化管线,会付出百倍于专用图形芯片的算力代价,在工业生产中毫无复用价值。
对于游戏架构师而言,SQLDoom 的启示不在于去数据库里渲染画面,而在于它提供了一种极具创意的解构视角:复杂的战场状态、动态阻挡和实体交互,完全可以被规格化为结构清晰的关系表。至于那些逐帧变动的像素矩阵,终究还是应该留给显卡去解决。要在生产环境中构建实时世界,懂得何时停留在数据层,远比把一切塞进数据库更有价值。
