0

我正在尝试用 PHP 构建一个实时策略浏览器游戏,但是我正在尝试使游戏尽可能真实,这意味着将为每个用户分配单独的数据来存储,并且单个数据库运行不顺利用我的想法,因为我想存储关于用户和他的“帝国”的一切,这可以让游戏更真实


这是关于要存储多少数据的想法:

  • 人口:例如,每个公民都有自己的行来跟踪他的类型、技能、统计数据、分配等,并且由于“帝国”可能有几千个公民次 (*),几千个用户可能会导致一些单表超载

  • 军队:例如,每个士兵都有自己的行来跟踪他的类型、技能、统计数据、分配等,并且由于军队可能会获得较大的时间 (*),数千名用户可能会再次导致过载对于单个表

  • 建筑物:....同样的故事

  • 财富: .... 一个真正的帝国可以持有的每一盎司或货物都被追踪到

  • 等等,你明白了....


所以我的第一个想法是给每个用户一个唯一的 ID ex。5b325475ef698183bbbcc5352c7f20f5... 并有一个用户文件夹,用于存储各个用户的 SQLite 数据库,其结构类似于:

/user_data
|--/5b325475ef698183bbbcc5352c7f20f5
|----/account.db
|----/buildings.db
|----/army.db
|----/population.db
|----/empire.db

还有一个 MySQL 数据库,用于存储前端的一般公共详细信息,这将是 sqlite 数据库中累积数据的结果

但是后来我听说一个 sqlite 数据库在对其执行操作时被锁定,这对于多用户站点可能不是一个好的解决方案此外,这样做的缺点是可能很难经常进行更改,因为您必须更改每个每个用户的数据库(仍然比使用可能会随着时间的推移变得缓慢和过载的单个数据库更好)


我的第二个想法是再次使用唯一的用户 ID 为每个用户使用不同的 MySQL 数据库,但是我想我最终会拥有太多的数据库连接和一个非常混乱的代码来维护,并且再次缩小规模是可能很难经常进行更改,因为您必须为每个用户更改每个数据库(同样仍然比使用可能会随着时间的推移变得缓慢和过载的单个数据库更好)


如果有人遇到此类问题并找到解决方案,请分享或上面发布的哪个想法可能最适合记住这是一个网页游戏,玩家将花费大部分时间切换页面导致大量数据库交互(这就是为什么单个 MySQL 数据库可能不是一个好的解决方案)

感谢您的时间和耐心:D

编辑:应用程序将使用 Yii 框架构建,但如果需要,我将从头构建一个新的“框架”

4

1 回答 1

2

如果您想增加用户数量,每个用户一个数据库绝对是无稽之谈。想象一下,有 10000 人在玩您的游戏,您必须拥有数十台数据库服务器来处理所有这些,您的成本肯定会爆炸式增长。

如果操作正确,关系数据库可以非常有效地处理数百万行数据。在继续您的项目之前,您应该熟悉数据库规范化的原则,否则您的方法将失败。

于 2013-06-06T19:05:54.727 回答