Active Record真随机吗?

时间:2014-10-30 09:39:50

标签: ruby-on-rails ruby random

我有一个非常简单的应用程序,需要(尽可能)随机将一个人分配给一个团队。

目前,我正在尝试几种不同的方法。

Team.where(assigned: false).order("RANDOM()").first

以及将其加载到数组中并使用sample()

arr.sample().inspect

然而,这些看起来并非真正随机,它们通常会留下最后的边缘(1,2..8,9,其中count = 10)。是否有更好的方法可以或不涉及AR? PSQL rand和sqlite3 random()之间是否存在数学上明显的差异?

对循环生成所述随机分布的任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

尽管可能有更多方法可以生成随机数来选择记录(即使是random.org这样的极端措施),但您提供的随机选择应该证明是绰绰有余的,它们之间几乎没有差别。

如果我是你,我会意识到两者之间的开销差异;一个应该只从数据库中选择一个记录,另一个将所有记录拉入内存并随机选择一个。如果Team表变大,这可能会导致内存和计算耗尽,从而减慢整个计算速度。第二种方法我只会在内存中需要整个表用于其他目的时使用。