我有一个非常简单的应用程序,需要(尽可能)随机将一个人分配给一个团队。
目前,我正在尝试几种不同的方法。
Team.where(assigned: false).order("RANDOM()").first
以及将其加载到数组中并使用sample()
arr.sample().inspect
然而,这些看起来并非真正随机,它们通常会留下最后的边缘(1,2..8,9,其中count = 10)。是否有更好的方法可以或不涉及AR? PSQL rand和sqlite3 random()之间是否存在数学上明显的差异?
对循环生成所述随机分布的任何帮助表示赞赏!
答案 0 :(得分:0)
尽管可能有更多方法可以生成随机数来选择记录(即使是random.org这样的极端措施),但您提供的随机选择应该证明是绰绰有余的,它们之间几乎没有差别。
如果我是你,我会意识到两者之间的开销差异;一个应该只从数据库中选择一个记录,另一个将所有记录拉入内存并随机选择一个。如果Team表变大,这可能会导致内存和计算耗尽,从而减慢整个计算速度。第二种方法我只会在内存中需要整个表用于其他目的时使用。