誰もがこれを行う方法を知っています-これと同等のものは何ですか:mysqlの「select * from YOUR_TABLE order by rand() limit 1」??
おそらくSDBでは不可能ですか?
誰もがこれを行う方法を知っています-これと同等のものは何ですか:mysqlの「select * from YOUR_TABLE order by rand() limit 1」??
おそらくSDBでは不可能ですか?
これについては、実際にAmazonの担当者と話しました。あなたがすることになっているのは、ランダムな値をデータとともに SDB に保存することです。行を戻したい場合は、別のランダム値を生成し、それより小さい最初の結果を選択します。そのため、もう少しデータを保存する必要がありますが、必要なクエリは 1 つだけです。
この質問が投稿されてから18か月以上経過していることは承知していますが、他の誰かがこれを必要とする場合に備えて、とにかく回答を投稿します。選択の均一性が重要でない場合は、ジャスティンが説明するアプローチが正しいです。ただし、均一性が重要な場合は、ジャスティンのアプローチの適応を使用できます(非常に大まかな疑似コードで)。
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
私は自分のブログでこれについてより詳細な記事を書き、確率分布が壊れている理由を示す例を示しました。
いいえ、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)
ただし、これには少なくとも 3 つのクエリが必要です。最初のものは、完全なカウント (NextToken なし) を取得するまで繰り返す必要があります。最初の一連のクエリからいくつかの NextToken を保存しない限り、ランダムなカウント (リクエストごとに最大 2500) に達するまで、2 番目のものを繰り返す必要があります。
全体として、あまり便利ではありません。