Mysql SQL中球员得分表的结构
我需要将游戏分数表从(请不要笑…*)ini数据库迁移到SQL表,因为我想将整个游戏迁移到MySQL数据库 需要将用户分数存储在数据库中,以便能够检索总/年/月/周/日时间跨度的结果表。这需要每年:{year score}+{month score}*12+{week score}*52+{day score}*360=~425行/用户+1行/用户。这感觉不到优化,这就是为什么我在这里提出这个问题 使用什么基地?如上所述,是时间跨度的基础,使用如下结构: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
{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}
我将如何获得“前一周速度最佳成绩前三名”。这需要进行多层次的计算
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