【问题标题】:Save into one table or create multiple tables?保存到一个表或创建多个表?
【发布时间】:2016-10-02 05:11:18
【问题描述】:

我处于两难境地,不知道哪个更好。假设我的网站上有 100++(或更多)游戏。我想为每场比赛存储高分。我应该将所有高分存储在 1 个表中还是每个游戏都有自己的表?

比较:

1 个表:1 个表包含很多行(数据)。每个玩不同游戏的用户都会向该表提交分数。不知道如果多个用户同时提交会发生什么。这个表结构应该是:gameID、name、score。所以我只做 1 个查询来查看 1 个 php 页面中的游戏高分。

如果使用多个表(每个游戏都有自己的表),我会有更多的表,但行(数据)要少得多。

从长远来看,哪个更好? sql性能如何?

我正在使用 php 和 mysql。

【问题讨论】:

  • bbtang,你为什么重置你的问题内容?请使用“接受答案”标志将此问题标记为已回答。
  • 这一定是我姐姐在改变我的问题。感谢您再次重新发布我的问题。我还不能接受这个答案,因为我还没有找到这个问题的最佳答案:(你有这个问题的任何解决方案/答案吗?

标签: php mysql structure


【解决方案1】:

我会为玩家制作一张表格,一张用于游戏,一张用于高分的多对多表格,其中包含 player_id、game_id 和高分值。

讨论

如果您有 100.000 名玩家和 500 款游戏,您最多可以获得 50.000.000 个条目。但它们是数字的并且非常短。 最好不要使用实时查询来提供此高分,而是使用缓存文件的结果。这就是几乎每个人都在做的事情。您每天更新缓存的高分列表。这样您就可以实时进行写入和从缓存中读取,并且它们不会干扰。

另一个建议是每月重置高分表,或者根据访问频率将旧数据分开。 Facebook 正在做类似的事情,正如我在他们的首席开发人员的演示文稿中看到的那样。

【讨论】:

  • 也就是说,highscrore 表将包含数千行或更多行(数据)??你能看到我对“罗宾日”的评论吗
  • 我不知道如何使用缓存文件。如果用户清除缓存怎么办?它会清除高分吗?每月清除高分对我来说似乎是另一种解决方案......除了使用缓存之外,您还使用过哪些其他方法并认为它是最好的??
  • @bbtang 我说的是服务器缓存,比如 memcache 或 APC,而不是用户缓存。
  • 我明白了.. 你能详细说明一下吗?我是新手,但被赋予了这项任务,我需要小心翼翼地完成它并选择实现它的最佳方式。请帮助并建议我如何做到这一点
  • @bbtang 我可以详细说明,但写了整本书来涵盖这些方面。您的问题应该尽可能具体和准时。
【解决方案2】:

您应该选择单表选项。这样,当您添加更多游戏时,您无需更改数据库架构。

数据库旨在处理此类数据。只要索引正确,一张包含大量数据的表不会给您带来任何问题。

【讨论】:

  • 一张表中可能有数千行或更多行。如果我执行“SELECT * from table WHERE ...”,会不会有什么问题?我的意思是,性能明智?检索数据需要很长时间吗?
  • 索引可以使这一切成为可能而不会出现性能问题。当您查看数百万或数十亿行时,您可能需要查看其他性能选项。但是,它不太可能将数据拆分到多个表中。
  • “但是,它不太可能将数据拆分到多个表中”这一行让我放弃了“多表”的想法。好吧,我将研究索引。总而言之,您会选择 1 个带索引的表而不是多个表,对吗?
  • 哦,顺便说一句,如果使用 1 个表。如果10个或者100个用户同时提交(提交到同一张表),会不会有问题?
  • 没有。数据库旨在处理并发性。只要您没有任何明显的代码错误,数据库应该可以完美地处理这种情况;至多,一些用户会遇到几 [毫秒] 秒的延迟。
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多