我正在尝试用PHP构建一个实时策略浏览器游戏但是我正在尝试使游戏尽可能真实,这意味着将为每个用户分配单独的数据,而单个数据库则不会我很好地理解了我的想法,因为我想存储关于用户和他的“帝国”的一切,这可以使游戏更加逼真
以下是关于要存储多少数据的想法:
人口:例如,每个公民都有自己的行来跟踪他的类型,技能,统计数据,作业等等,因为“帝国”可以有几千公民时间( *)几千个用户可能会导致单个表的重载
军队:例如,每个士兵都有自己的行来追踪他的类型,技能,统计数据,分配等等。 可以得到一些大的时间(*)可能会导致数千个用户 再次在单个表的重载中
建筑物:......同样的故事
财富:......跟踪真实帝国可以持有的每盎司或货物
等。你明白了......
所以我的第一个想法是给每个用户一个唯一的ID。 5b325475ef698183bbbcc5352c7f20f5 ...并且有一个用户文件夹,用于在类似于此的结构中为各个用户存储SQLite数据库:
/user_data
|--/5b325475ef698183bbbcc5352c7f20f5
|----/account.db
|----/buildings.db
|----/army.db
|----/population.db
|----/empire.db
用于存储前端的一般公共详细信息的MySQL数据库,这将是来自sqlite数据库的累积数据的结果
但后来我听说sqlite数据库在对其执行操作时被锁定,这可能不是多用户站点的好解决方案 另外一点是,由于必须为每个用户更改每个数据库,因此可能很难频繁地进行更改(仍然比使用可能随时间变慢和过载的单个数据库更好)
我的第二个想法是使用唯一的用户ID为每个用户再次拥有一个不同的MySQL数据库但是我想我最终会有太多的数据库连接和一个非常混乱的代码来维护和再次缩小这可能很难经常进行更改,因为您必须为每个用户更改每个数据库(再次使用可能会随着时间的推移变慢和过载的单个数据库更好)
如果有人遇到这种问题并找到解决方案,请分享一下,或者上面提到的哪一个想法可能是最合适的,记住这是一个浏览器游戏,玩家将花费大部分时间来切换页面大量的数据库交互(这就是为什么单个MySQL数据库可能不是一个好的解决方案)
感谢您的时间和耐心:D
编辑: 该应用程序将使用Yii框架构建,但如果需要,我将从头开始构建一个新的“框架”
答案 0 :(得分:2)
如果您想增加用户数量,每个用户一个数据库绝对是无稽之谈。想象一下10000人玩你的游戏,你必须有几十个数据库服务器来处理它们,你的成本肯定会爆炸。
当您正确执行操作时,关系数据库可以非常有效地处理数百万行数据。在继续项目之前,您应该熟悉数据库规范化的原则,否则您的方法就会失败。