我们正在Ruby on Rails / postgres服务器上托管iPhone社交游戏的后端。
每个游戏都有54个问题通过数据库中的关系表连接。由于我们目前有大约200万个正在进行的游戏,因此关系表包含大约100M行。这吃了很多记忆。我们现在正在考虑构建一种算法,该算法使用game_id播种的伪随机序列生成54个问题ID。这个想法是产生一个看似随机的问题集合,而不会将明确的游戏问题关系保存到数据库中。这样我们就可以将负载从数据库移动到应用服务器。这是个好主意吗?
伪码:
r = Random.new(game_id)
q1_id = r.rand(n_questions)
q2_id = r.rand(n_questions)
...
答案 0 :(得分:2)
是的,你需要的只是一个确定性函数,它获取游戏ID并产生一个序列。像向gameId添加salt并对结果进行哈希处理一样简单,只需将结果值映射到问题ID即可。 (看看组合学就这种事情。)
如果您正在处理类似于由游戏标识符键入的问题标识符列表的内容,并且您需要对答案的持久性支持,则有比RDBMS更好的选项。首先来看看Redis吧。