Mysql 我应该根据活动拆分表吗?
我正在做一个爱好项目,这是一个在线游戏。该游戏将玩家数据存储在一个大的平面文件中。数据本身包含玩家的所有信息,从名字到甚至是玩家本身的项目。它本身有相当多的列,并且有几十个项只会增加引导的平面文件大小 给你一个视觉效果。我当前的播放器文件是192列(不包括项目) 玩家数据 在我减少绒毛后,我的平面文件中有51列用于播放器数据。这不包括玩家的物品或能力。我已经决定可以将这些表拆分为单独的表,并使用FK链接 51列数据是播放器独有的,不应重复。他们并不是我听说的正常化的好人选 桌子Mysql 我应该根据活动拆分表吗?,mysql,sql,database,database-schema,Mysql,Sql,Database,Database Schema,我正在做一个爱好项目,这是一个在线游戏。该游戏将玩家数据存储在一个大的平面文件中。数据本身包含玩家的所有信息,从名字到甚至是玩家本身的项目。它本身有相当多的列,并且有几十个项只会增加引导的平面文件大小 给你一个视觉效果。我当前的播放器文件是192列(不包括项目) 玩家数据 在我减少绒毛后,我的平面文件中有51列用于播放器数据。这不包括玩家的物品或能力。我已经决定可以将这些表拆分为单独的表,并使用FK链接 51列数据是播放器独有的,不应重复。他们并不是我听说的正常化的好人选 桌子 身份证 名字
- 身份证
- 名字
- 密码
- 比赛
- 性
- 阶级
- 水平仪
- 黄金
- 银币
- 经历
- 探索
- 盔甲
- 力量
- 智慧
- 灵巧
- 等
这就引出了一个问题。如果这些列在同一个表中,我可以根据活动将它们拆分并提高性能,而不是传统的数据规范化方法吗?或者我应该把它们放在同一个表中,仅仅依靠适当的索引吗?大多数专栏看起来都不错,但正如我所说的,有些专栏的使用率高于其他专栏。但是,当某些应用比其他应用更多时,会有很大的不同。这种事让我很害怕。你所说的被称为,实际上是一件众所周知且经常发生的事情 没有关于何时去规范化的一般规则和指示。 这取决于每个项目的许多特定内容(如硬件、数据库类型和您提到的“活动”(仅举几个例子),最终需要分析每个应用程序以得出结论 此外,有时非规范化意味着将一个表拆分为两个具有一对一关系的表(如您的案例)。有时,这意味着摆脱FK,将所有内容放在一个包含许多列的大表中,以避免在选择时进行连接 最重要的是,请记住,您的问题与其说是关于可伸缩性,不如说是关于性能。分为不同的表/数据库意味着您最终可以将数据存储在不同的机器中,每台机器都有一个特定的硬件体系结构和一个适合用例的数据库
游戏行业中的非规范化示例 当涉及到MMORPG时,我能想到的一个非规范化的例子是将所有不经常更改的用户数据存储在一个BLOB中。这不仅是非规范化,而且整行存储为一系列字节。一点都不高兴 有一家公司是这样做的 这意味着您可以以较慢的更新为代价进行更快的选择,最重要的是,更改用户的模式会成为一个真正的麻烦(但这里的理由是,在时间结束之前,
用户名
,密码
,电子邮件
)。这也意味着您的用户数据现在可以存储在更简单的键/值存储中,而不是具有更大开销的RDBMS。当然,获取用户信息的登录服务器不需要像处理游戏的服务器那样性能出众
因此,请尝试阅读关于非规范化的用例(这是一个非常活跃的话题),看看您可以在哪里将您的发现应用到您的案例中。另外,请记住,预先优化有时会适得其反,也许您现在应该专注于开发您的游戏。当您遇到扩展/性能问题时,您很可能会有大量用户提供的资金来解决该问题。祝你好运 你所提到的被称为,实际上是一件众所周知且经常发生的事情 没有关于何时去规范化的一般规则和指示。 这取决于每个项目的许多特定内容(如硬件、数据库类型和您提到的“活动”(仅举几个例子),最终需要分析每个应用程序以得出结论 此外,有时非规范化意味着将一个表拆分为两个具有一对一关系的表(如您的案例)。有时,这意味着摆脱FK,将所有内容放在一个包含许多列的大表中,以避免在选择时进行连接 最重要的是,请记住,您的问题与其说是关于可伸缩性,不如说是关于性能。分为不同的表/数据库意味着您最终可以将数据存储在不同的机器中,每台机器都有一个特定的硬件体系结构和一个适合用例的数据库
游戏行业中的非规范化示例 当涉及到MMORPG时,我能想到的一个非规范化的例子是将所有不经常更改的用户数据存储在一个BLOB中。这不仅是非规范化,而且整行存储为一系列字节。一点都不高兴 有一家公司是这样做的 这意味着您可以以较慢的更新为代价进行更快的选择,最重要的是,更改用户的模式会成为一个真正的麻烦(但这里的理由是,在时间结束之前,
用户名
,密码
,电子邮件
)。这也意味着您的用户数据现在可以存储在更简单的键/值存储中