我在Rails编写浏览器游戏应用程序。它是基于聊天的,我正在使用MySQL作为数据库。但是,当谈到游戏的聊天记录时,我遇到了一个问题。
应用程序目标要求在任何给定时间都有多个房间,人们正在玩基于聊天的游戏。对话将非常不变,并且还有许多其他操作,例如私人消息和游戏操作,也必须记录。在其他玩家之后加入游戏的玩家必须能够在加入之前查看聊天记录,并且必须可以查看游戏。
我的第一个想法是,在游戏开始时,创建一个与游戏标识符匹配的数据库,并将所有内容存储在那里。然后,当有人加入游戏时,我们可以将其解析回来。一旦游戏结束一段时间,脚本将获取数据库内容,将其解析为XML对象,并将其存储在数据库中以供游戏审查,删除表以保持精简运行。
我创建了一个名为Message的moddel,其匹配表具有相同的列,用于我想要存储在游戏表中的那些 - id,timestamp,sender,target(用于PM和操作),消息类型和内容。然后我为Message对象设置初始化程序,将表名设置为'game _#{game_id}'。然而Rails正在发脾气 - 我得到一个未定义的方法has_key?我尝试在Rails中初始化对象时出错。基于此我发现我正在使用的方法可能有点un-Rails-ian,并且可能它失败了在Rails中工作的目的,使用它具有的优秀对象/数据库管理功能。< / p>
我已经考虑了其他替代方案,例如暂时将所有消息保存在主消息表中,只是按游戏ID查询它们,但我不确定MySQL表是否可以快速提供此数据同时接受不断的写入,特别是在我们让一打或多场游戏同时平均每秒消息或两次的情况下。有人向我建议,从性能的角度来看,像MongoDB封顶的临时存储集合这样的noSQL解决方案将是一个很好的选择,但这仍然会浪费Rails提供的所有ActiveRecord优点。
是否有一种可靠且相对快速的方法来满足约束,使得记录的消息能够在游戏进行时快速存储和获取以便快速访问,然后以某种类型的低开销方法存储以供审查?上述任何一个想法是否可行或是否有一个我忽略的单独选项?