Mysql SQL中球员得分表的结构

Mysql SQL中球员得分表的结构,mysql,sql,datatable,Mysql,Sql,Datatable,我需要将游戏分数表从(请不要笑…*)ini数据库迁移到SQL表,因为我想将整个游戏迁移到MySQL数据库 需要将用户分数存储在数据库中,以便能够检索总/年/月/周/日时间跨度的结果表。这需要每年:{year score}+{month score}*12+{week score}*52+{day score}*360=~425行/用户+1行/用户。这感觉不到优化,这就是为什么我在这里提出这个问题 使用什么基地?如上所述,是时间跨度的基础,使用如下结构: {timespan type} {time

我需要将游戏分数表从(请不要笑…*)ini数据库迁移到SQL表,因为我想将整个游戏迁移到MySQL数据库

需要将用户分数存储在数据库中,以便能够检索总/年/月/周/日时间跨度的结果表。这需要每年:{year score}+{month score}*12+{week score}*52+{day score}*360=~425行/用户+1行/用户。这感觉不到优化,这就是为什么我在这里提出这个问题

使用什么基地?如上所述,是时间跨度的基础,使用如下结构:

{timespan type} {timespan} {user ID} {score for type 1} {score for type 1} {score for type 1} {score for type 2}
还有一件事我需要注意。不同的分数类型有不同的排序方法。若第一种类型是普通分数,我取最高的(越多越好),那个么第二种类型是速度,我按最快的速度排序(越小越好)

若你们有一个问题:“为什么要把几周/几个月/几年/总体的行分开?”那个么答案是,我想要一些快速的方法来得到一个结果表,例如,对于最后几周的分数类型2,前3名

我在想,也许,如果我只存储{day score},在当前结构中去掉每个用户426-360=66行,从而产生新的结构:

{user ID} {day number} {score for type 1} {score for type 1} {score for type 1} {score for type 2}
我将如何获得“前一周速度最佳成绩前三名”。这需要进行多层次的计算

  • 查询所有用户前几周的时间跨度为天的行
  • 对每个{user ID}的所有分数求和,或获得最低分数(取决于分数类型),然后放入新表中
  • 查询新表,按分数列ASC或DESC排序(取决于分数类型)并检索前3行
  • 重复步骤23.对于每个分数列
  • 如果我想一分钟做超过1-3次(就像表中的每个新输入之后一样,我需要评估,对于特定用户来说,要获得更高的地位需要多少分,我想这需要一些严肃的服务器资源。从问题顶部给出的结构(时间跨度基数),这只需要步骤3.对于每个分数列

    谢谢你的回答和建议

    目前的数据格式如下:

    Overall file: overall.ini
    (in folder of yearnumber) Year file: 2011.ini
    (in folder of yearnumber) Month files: m1.ini ... m12.ini
    (in folder of yearnumber) Week files: n1.ini ... n52.ini
    (in folder of yearnumber) Day files: m1d1.ini ... m12d1.ini
    
    内部存储的数据:

    [~REZ~]
    User13245325=1145 203.433 3 1.735
    User3425435=1412 173.871 8 2
    User32487854=18 76.253 1 11.016
    User345645=2153 155.139 8 2.344
    User65875=100 67.767 2 10.016
    User453325=26 138.568 1 3.031
    

    PS:这是一个一般性的问题,与游戏开发没有直接关系,所以请不要把它扔到游戏开发so部分。

    老实说,我真的很难理解你在这里提出的问题-但是如果我理解正确,还有其他一些系统记录了实际的游戏结果,你想把它转过来吗游戏数据转换为排行榜风格的数据结构,您希望查询运行得非常非常快

    因此,首先,你似乎担心数据的大小。除非你处理的是绝对天文数字的规模(谷歌、Facebook、Twitter),否则你可能不需要这样做。磁盘空间很便宜,索引良好的数据库处理数百万行的速度与处理几十行的速度一样快

    从广义上讲,您需要决定是否要用空间(预先计算结果)换取速度,以及何时进行计算

    一般来说,在运行时处理“原始”数据并计算结果是最容易理解和维护的,并且有最低的bug风险,但也可能是最慢的。不过,这就是我要开始的地方。您没有说明“原始”数据是如何处理的数据是存储的,或者更新的频率如何,但我会先编写一个查询,生成您想要的数据。如果有困难,我会将一些中间步骤考虑到视图中,以简化查询

    然后,我将使用负载测试工具(JMeter或类似工具是完美的)来测量性能

    如果(但仅当)速度真的太慢,我会从逐渐将视图转换为预先计算的表开始,通过引入常规批处理作业来填充这些视图。这完全取决于您的数据以及允许的“过时”程度

    您通常可以从这种方法中获得非常好的性能增益,并且只要批处理作业运行,解决方案仍然相当简单并且能够抵抗bug


    <> >只有当这种方法遇到性能瓶颈时,我才会考虑预先计算整个数据集。在这种情况下,你也可以创建一个与你想要输出到屏幕的表完全相同的表。

    < P>。老实说,我真的很难理解你在这里的要求。但是,如果我理解正确的话,有一些OT。她的系统记录了实际的比赛结果,你想把比赛数据转换成排行榜式的数据结构,你想让你的查询运行得非常非常快

    因此,首先,你似乎担心数据的大小。除非你处理的是绝对天文数字的规模(谷歌、Facebook、Twitter),否则你可能不需要这样做。磁盘空间很便宜,索引良好的数据库处理数百万行的速度与处理几十行的速度一样快

    从广义上讲,您需要决定是否要用空间(预先计算结果)换取速度,以及何时进行计算

    一般来说,在运行时处理“原始”数据并计算结果是最容易理解和维护的,并且有最低的bug风险,但也可能是最慢的。不过,这就是我要开始的地方。您没有说明“原始”数据是如何处理的数据是存储的,或者更新的频率如何,但我会先编写一个查询,生成您想要的数据。如果有困难,我会将一些中间步骤考虑到视图中,以简化查询

    然后,我将使用负载测试工具(JMeter或类似工具是完美的)来测量性能

    如果(但仅当)速度真的太慢,我会从逐渐将视图转换为预先计算的表开始,通过引入常规批处理作业来填充这些视图。这完全取决于您的数据以及允许的“过时”程度

    你通常可以得到很好的表现
    score
    ------
    user_id
    speed
    score_total