各种比赛/比赛类型的数据结构(联赛,阶梯,单/双消除等)

时间:2012-11-26 12:26:03

标签: mysql database data-structures tournament datamodel

我正在尝试构建一个系统,用户可以轻松创建各种类型的锦标赛并与其他用户一起参与。这不是特定的游戏,而是一个通用工具,用于尽可能快地从任何设备查看和更新​​锦标赛结果,只需最少的交互,因此实际的应用程序不会妨碍派对等等。

用户个人资料,比赛和结果保存在数据库中,但锦标赛中的更改应立即反映在客户端的视图中,动画并且没有页面重新加载(JavaScript),然后通过ajax发送到服务器,验证并保存到数据库(PHP,MySQL)。客户经常收听服务器并在更新后更新所有客户的视图(竞赛者重命名,匹配结果和退出等)。

我找到了一些单人或双人淘汰锦标赛的数据模型,但是这个模型应该支持各种锦标赛类型,比如联赛,阶梯,单/双淘汰赛和循环赛。

那么我应该为这样的项目使用什么样的数据(基础)模型,这基本上是一个Google Docs电子表格,但是每个锦标赛类型都有预定义的外观和控件?

我应该选择适合所有锦标赛的模型,还是为所有不同的锦标赛类型创建单独的表格?任何可能对这样的项目有用的资源?

1 个答案:

答案 0 :(得分:1)

这里有几个问题/问题,所以我会尝试解决每个问题。

所有比赛互动应该是实时的/反映给许多用户。

对于您网站上的中小型流量,这可能不是问题。对于较重的流量,这将很快成为一个主要问题。

以一个例子为例,考虑使用AJAX调用轮询数据库的频率。每一秒?因此,如果您有100个人打开一个页面,那么每秒有100个数据库调用?你会发现它会很快杀死你的数据库。

即使这是稍微偏离主题,我强烈建议您调查如何提前缓存锦标赛结果。您可以缓存统计数据等,让它们过期或过期使它们过期,但肯定会花些时间研究它。

实时统计/结果

请记住,连接在关系数据库中需要时间。如果你大规模地规范你的锦标赛结构,那么获得统计数据可能会很痛苦。系统中最难实现的部分是每场锦标赛的总量和统计数据。

当您设计数据库/表格/视图/存储过程时,请记住最终目标 - 快速获取统计信息。这可能意味着过多地规范化数据(以避免过多的连接)。这也可能意味着要非常密切关注您的数据类型 - 例如使用位/短路/等。而不是整数。

如何为不同的锦标赛类型建模

我对锦标赛模型并不熟悉,但我确实对如何建模有具体的建议。 =)

您应该问自己一些问题:

  1. 所有锦标赛都有共同的领域吗?换句话说,对于循环锦标赛,我们存储了10个领域。对于单场淘汰赛,我们存储了11个领域。如果他们共享相同的10个字段,那么我建议将所有锦标赛类型放入一个表中,然后使用tournament_type字段来确定您的应用程序的锦标赛类型。

  2. 所有锦标赛都没有公共领域吗?让它们分开 - 每种锦标赛类型一个。您可以为共享数据创建一个表,但随后会为不同的表提供特定信息。

  3. 锦标赛领域会随着时间的推移而分开吗?随着时间的推移,您需要为锦标赛类型添加字段。如果您预测锦标赛将随着时间的推移变得非常独特且非常具体,请将它们分开。否则,最终会出现大量具有大量NULL值的字段。

  4. 您是否考虑过NoSQL解决方案? NoSQL存储的好处在于它使数据非规范化,因此您没有连接。您也可以在同一“表”或容器中使用异构(不同类型的数据)。只需考虑一下因为它可能会让您的生活变得更加轻松。以MongoDB为例。