Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/10/2011, 03:47
Avatar de repara2
repara2
 
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 8 meses
Puntos: 331
Respuesta: Random con un porcentaje

Hola Jota, no se entiende muy bien la pregunta pero me atrevo a proponerte una solución. Supongo que quieres generar números o porcentajes aleatorios pero respetando el valor de la db. Cambio de ejemplo.
Tenemos unos servidores y queremos balancear la carga aleatoriamente pero manteniendo cierto porcentaje. De esta manera, tenemos server1 15%, server2 50%, server3 20%, server4 15%. Queremos que la carga se distribuya aleatoriamente, pero que cada server reciba este porcentaje de carga sobre un total de 100 peticiones. Una solución sería:

Código PHP:
Ver original
  1. <?php
  2. #1. Un array con los porcentajes que quiero que reciba cada server donde server => porcentaje:
  3.  
  4. $balanceo = array(1 => 15, 2 => 50, 3 => 20, 4 => 15);
  5.  
  6. #2. Genero una ristra de 100 elementos que representan los porcentajes anteriores. Así, el 1 aparecerá 10 veces, el 2 50, etc...
  7.  
  8. $ristra = array();
  9.  
  10. foreach ($balanceo as $server => $porcentaje)
  11. {
  12.     for ($i = 0; $i < $porcentaje; $i++) {
  13.         $ristra[] = $server;
  14.     }
  15. }
  16. # Ahora $ristra contiene 10 veces 1, 50 veces 2, etc...
  17. print_r($ristra);
  18.  
  19. #. Cada vez que haga falta resolver una petición, elijo una posición aleatoria del array, este valor indica el server a donde debo balancear:
  20.  
  21. $max = 100;
  22. $min = 1;
  23.  
  24. $redirectTo = $ristra[rand($min, $max)];
  25.  
  26. //Así las posibilidades de caer en server uno son 10%, server 2 50%.
  27. echo "<h3>Redireccionando a $redirectTo</h3>";
  28. ?>

Te dejo el ejemplo, seguro que cualquier forero puede mejorarlo u orientarte mejor.
Salu2!
__________________
Fere libenter homines, id quod volunt, credunt.