使用种子随机序列代替100M行关系表

时间:2012-11-04 22:56:58

标签: ruby-on-rails ruby postgresql random

我们正在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)
... 

1 个答案:

答案 0 :(得分:2)

是的,你需要的只是一个确定性函数,它获取游戏ID并产生一个序列。像向gameId添加salt并对结果进行哈希处理一样简单,只需将结果值映射到问题ID即可。 (看看组合学就这种事情。)

如果您正在处理类似于由游戏标识符键入的问题标识符列表的内容,并且您需要对答案的持久性支持,则有比RDBMS更好的选项。首先来看看Redis吧。