数据库设计问题 - 多人游戏

时间:2010-12-28 23:14:19

标签: mysql database database-design

我是数据库设计的新手。我正在尝试编写一个棋盘游戏(最多4个玩家),并试图找到一种方法来互相交流。 我根据stackoverflow上的建议使用数据库。

我的问题是这个 - 当玩家A做出移动时,移动必须由B,C和D读取。所以A做出移动的事实需要传达给B,C和D.我正在做以下方式。请告诉我是否有更好的方法。对我来说,它似乎都是错误的,令人难以置信的片状。

我有一个包含以下字段的表格 -

gameId,userMove,flagA,flagB,flagC,flagD

所以当A做出移动时我会写其他东西 - (flagA = 0,flagB = 1,flagC = 1,flagD = 1)

当B,C或D读取A的移动时,它们会递减相应的标记。

除非所有标志都为0,否则A不会更新表。

当其他人采取行动时也会发生同样的事情。

评论?必须有一个更好的方法。我在这看错了 -

  • 我正在循环选择,直到A
  • 的所有标志都为0
  • 我正在循环选择,直到相应用户的标志设置为读取移动。

这是我需要担心的很多服务器负载和客户端超时。

我希望我能够清楚地解释我的问题。如果需要,请提出问题。

感谢任何帮助。

编辑:游戏是基于网络的(在浏览器中运行),我使用php进行服务器端开发,所以我不能使用内存缓存,尽管如果可能的话我会喜欢这样做。

谢谢, - 帕夫

3 个答案:

答案 0 :(得分:1)

如果您的游戏玩家在单个游戏会话期间将与一个游戏服务器进行交互,那么您可以将所有状态保留在内存中。

数据库非常适合持久存储数据,并保证原子性,一致性和完整性。但是,您似乎不需要任何这些功能用于您所描述的时态。

答案 1 :(得分:0)

如果flagA,B,C和D都是位,您可以考虑将它们全部放入一列并将该列视为位掩码。

这将允许一列控制所有标志。它可以使您的选择和更新更加清洁。

在这里阅读使用位掩码:

答案 2 :(得分:0)

您是否考虑使用文件存储信息?