|
Posted by Floortje on 05/28/07 11:58
Rami Elomaa wrote:
> alpha.beta0@googlemail.com kirjoitti:
>> I have a MySQL table of servers, I use RAND() to pick a random server
>> to use each time, but how can I add a number to each server entry that
>> allows it be to picked more often than the other 20 servers?
>>
>> For example Server1's weight is 80 and Server2's weight is 40 and
>> hence Server1 is more likely to be picked than the others.
>>
>
> In theory like this: pick a random weight and take into group all the
> items that weigh more, it's more likely that heavier items are taken
> into the group, than the lighter. From the group you have created, pick
> one randomly. If no items were in the group, your random weight was too
> big, so you might limit it to < maxweight, so that always at least one
> item is picked.
>
> Transforming this into a query is another thing. This is very rough
> example but you'll get the idea, I suppose:
>
> SELECT * FROM ( SELECT * FROM servers WHERE weight > RAND() ) ORDER BY
> RAND() LIMIT 1,1
Nice .. real nice but wrong :-(
say you have this
a-2
b-1
c-1
d-1
Valid random weight numbers are 1 and 2 (both 50%)
Then your chances of picking A are 62.5% while B,C,D only get a 12.5%
change of being picked (instead of 40-20-20-20)
--
Arjen
www.hondenpage.com
Navigation:
[Reply to this message]
|