我希望某个知识渊博的人能够为我解决所面临的问题。
我有一款游戏,其中我使用rails作为后端来处理许多任务,包括获取高分。在游戏中,用户可以创建自己的关卡,其他用户随后可以在该关卡上玩。我目前通过以下方式将分数存储在称为“分数”的表中
level_id:级别的ID
user_id:玩关卡的用户的ID
total_score:用户在该级别上获得的得分
每次用户完成一个级别时,都会显示该级别的高分,但是我看到的问题是,对于每个级别,我必须获取具有相应level_id的每个数据库条目,然后按降序对获取的条目进行排序总成绩。我觉得似乎有更好的方法,因为我目前必须对每个级别的每个分数进行排序,这似乎是重复的,而且我看到表中的条目很多,这可能会很慢,并获取level_id。
我想知道一种更好的方法是否是为每个级别创建一个表,该表可能包含user_id和total_score,并由total_score进行排序。我觉得这将减少需要执行的排序过程的数量,但是我想知道在这种格式的数据库中是否有大量表的缺点,或者是否有其他可能的方法解决这个问题?
谢谢,
约翰
您当前的设计很可能已经足够了,并且每个级别使用一张表将不会带来什么好处,但会带来很多麻烦。
基本上,ActiveRecord是围绕“固定”模式(在运行时不会更改)构建的,并且让每个模型实例占用其自己的表只是行不通。相对数据库不是文档存储。
您需要batsh * t crazy join才能从多个级别提取信息,并且您基本上必须手动执行每种查询或编写自己的ORM。
您可以通过设置分数的默认顺序并加入来完成您想做的事情:
@level = Level.eager_load(:scores)
.find(params[:id])
但是首先,您需要问自己这是否是过早的优化。过早的优化通常会导致对错误问题的错误答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句