news 2026/10/11 12:50:28

游戏背包背后的数据库三层秘密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
游戏背包背后的数据库三层秘密

我们不背定义,直接看一个具体场景:

你开发了一款游戏。玩家打开背包,看到自己有 3 瓶治疗药水。这个过程中,数据库的三层模型分别在哪里?

先记住:不是有三份数据,而是从三个角度看同一套数据。


1. 先把全服背包数据设计出来:模式

游戏需要记录所有玩家的物品,于是你设计了一张“背包表”:

玩家ID物品名称数量
1001治疗药水3
1001铁矿石10
1002治疗药水8

你规定:

每条记录包含:玩家ID、物品名称、数量。 数量必须是整数,而且不能小于 0。

“这张表有哪些字段、字段是什么类型、有什么规则”,就属于模式。

注意区分:

  • “数量必须是非负整数”是结构和规则;
  • “玩家 1001 有 3 瓶药水”是具体数据。

玩家喝掉一瓶药水,数量从 3 变成 2,只是数据变了,表的结构没变,模式没有变。

你可以把模式理解为:

整个数据库的表格设计图。

实际项目还会有玩家表、装备表等,它们的结构及相互关系共同组成全局的模式。


2. 玩家只需要自己的背包:外模式

数据库里有所有玩家的数据,但玩家 1001 打开背包时,只需要得到:

物品名称数量
治疗药水3
铁矿石10

这里有两个变化:

  1. 只取玩家 1001 的记录;
  2. 不再显示“玩家ID”这一列,因为已经知道这是自己的背包。

面向某类用户或应用提供的局部数据结构,就是外模式所描述的内容。

运营人员可能需要另一种视角:

物品名称全服总数量
治疗药水11
铁矿石10

药水为什么是 11?

玩家 1001 的 3 瓶 + 玩家 1002 的 8 瓶 = 11 瓶

所以,同一套数据可以有不同视角:

玩家:查看自己的物品明细。 运营:查看全服物品总量。

你可以把外模式理解为:

从完整数据库中,为特定使用者提供的一份数据视角。

这里讲的是数据视角,不是背包界面的颜色、图标和布局。实际限制玩家只能读取自己的数据,还需要权限控制。


3. 这些记录到底怎么存、怎么找:内模式

刚才的表是画给人看的。数据库底层不会真的存成一张屏幕上的表格。

它需要把记录组织在文件和数据页里,还可以建立索引来加快查找。

假设全服有一千万条背包记录,现在要查玩家 1001 的物品。

没有合适的索引时

数据库可能需要扫描大量记录:

检查这条:是不是玩家 1001? 检查下一条:是不是玩家 1001? ……

有合适的索引时

索引类似书的目录,可以帮助数据库更快找到相关记录:

查找玩家 1001 ↓ 定位相关数据 ↓ 读取他的背包记录

记录如何组织、索引采用什么结构、如何通过它找到数据,这些属于内模式关心的事情。

你可以把内模式理解为:

数据库底层存放和访问数据的方案。


4. 把一次“打开背包”串起来

现在,玩家 1001 打开背包:

① 应用需要什么数据? 当前玩家的“物品名称、数量”。 ——外模式的角度 ② 这些数据在逻辑上来自哪里? 背包表,字段是“玩家ID、物品名称、数量”。 ——模式的角度 ③ 数据库怎样找到它们? 利用索引,读取相应的数据页。 ——内模式的角度

这是三个描述角度,不是说请求必须经过三个独立服务器。


5. 为什么要分开?看一次实际优化

上线后,玩家抱怨:

“打开背包太慢了!”

于是,你为背包查询增加了合适的索引。

结果是:

检查项是否变化
玩家看到的物品名称和数量没变
背包表的字段和规则没变
数据库底层查找数据的方式变了

也就是:

外模式没变 模式没变 内模式发生调整

你优化了底层存取方式,却不必让玩家端跟着修改数据接口。这就是分层带来的好处之一,叫作物理数据独立性。


最后,只记住这三句话

拿这款游戏来说:

  • 外模式:玩家需要看到怎样的背包数据?
  • 模式:整个背包数据库的表和规则怎样设计?
  • 内模式:背包记录在底层怎样存、怎样找?

面向使用者看,是外模式;面向全局结构看,是模式;面向底层存储看,是内模式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 12:48:54

上海 AI 双子星出海:基元律动 × 无问芯穹联手背后的产业信号

上海 AI 双子星出海:基元律动 无问芯穹联手背后的产业信号 【免费下载链接】NeoHorse-1-9B 项目地址: https://ai.gitcode.com/hf_mirrors/TokenRhythm/NeoHorse-1-9B 2026 年 9 月,一则不算高调但信息量极大的消息在 AI 圈发酵:由前…

作者头像 李华
网站建设 2026/10/11 12:47:08

GLM-5.2来了,普通人该怎么看?TaoToken统一Key实测1M上下文Coding

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/11 12:47:01

Flutter CLI工具鸿蒙化适配:模板资产管理实践指南

很长时间没写鸿蒙相关的东西了,今天聊一个偏工程的话题:把一个 Flutter 脚手架工具做成鸿蒙化。准确说,是 flutter_architect_cli 这套架构模板资产管理工具,如何从传统 Flutter 工程平滑迁移到鸿蒙工程体系。 这个工具我前后用…

作者头像 李华
网站建设 2026/10/11 12:45:05

SpringBoot集成OFD:PDF与OFD互转及SM2国密签名实战

最近在折腾一个电子档案相关的SpringBoot项目,业务上要求既能把历史PDF转成OFD归档,又要能接收对方发来的OFD文件转回PDF做在线预览,最后还要在归档前用SM2国密算法做电子签名。一整套流程走下来,踩了不少坑,也把整个方…

作者头像 李华