从AWS上的简单数据库(SDB)中选择随机结果

时间:2010-01-15 07:57:12

标签: amazon-simpledb

任何人都知道如何做到这一点 - 恰恰相反: “通过rand()限制1”从YOUR_TABLE订单中选择*“ 在mysql ??

SDB可能无法实现?

3 个答案:

答案 0 :(得分:2)

我实际上和亚马逊的一位代表谈过此事。您应该做的是将随机值与您的数据一起存储在SDB中。如果想要返回一行,则生成另一个随机值并选择少于该值的第一个结果。所以你需要存储更多的数据,但它只需要一个查询。

答案 1 :(得分:1)

我意识到自这个问题发布以来已经过去了18个月但是如果有人需要这个问题,我会发布我的答案。如果选择的一致性重要,那么approach Justin describes是正确的。然而,如果统一性很重要,那么你可以使用Justin方法的改编(在非常粗糙的伪代码中):

Generate a random value
Generate a random boolean
If the boolean is true {
  Select the first item with a randomizer less than or equal to the random value
}
otherwise {
  Select the first item with a randomizer greater than or equal to the random value
}
Generate a new random value
Set the selected items randomizer to the new random value

我在my blog上对此进行了更深入的写作,并举例说明了概率分布被打破的原因。

答案 2 :(得分:0)

不,SimpleDB中没有任何类型的随机函数。你必须自己实现随机部分。

您可以执行以下操作:

count = sdb.select("select count(*) from YOUR_TABLE")
random = (rand() * count) + 1
nextToken = sdb.select("select count(*) from YOUR_TABLE limit " + random)
item = sdb.select("select * from YOUR_TABLE limit 1" , nextToken)

但这至少需要三次查询。第一个必须重复,直到你得到完整的计数(没有NextToken)。除非您从第一组查询中保存了一些NextTokens,否则需要重复第二个,直到达到随机计数(每个请求最多2500个)。

总的来说不太方便。