comparar dos registros

Rodrigo Fuentealba darkprox en gmail.com
Jue Feb 8 12:34:08 CLST 2007


El 8/02/07, Alberto Rivera <rivera.alberto en gmail.com> escribió:
> Si tienes razon Rodrigo, eso necesito después apenas exista un tiempo
> voy a tener que poner a revisión todas las consultas y ciclos para
> buscar una mejor performance del sistema, acuerdate que esta cuestión va
> a tener que funcionar en servidores web chiquititos, porque no creo que
> los colegios rurales compren un mega server pa esto ....

Mira, PHP no es muy consumidor de memoria que digamos, por lo que no
habria problemas en poner una página de estas en un Pentium III de 500
MHz o algo así.

MySQL por su parte también es rápido para lecturas, pero medio lenteja
para escrituras, hay harta agua bajo ese río. Yo por lo general opto
por:

1.- Normalizar las bases de datos lo mejor posible, bien granulares,
cosa que por obtener un dato no tenga que recorrer una tabla con
tantos registros.

2.- Establecer un esquema de índices de acuerdo a las consultas que se
hacen. Tampoco es volverse loco creando indexes, sino para las
consultas y las tablas más pesadas.

3.- Las queries repetibles (por ejemplo, para llenar <select>s y todo
eso, las pongo por lo general en vistas (views).

4.- Para los códigos, mucha gente acostumbra a usar var chars como sus
claves primarias (no digo que un informático serio lo haría, pero sí
alguien puede llegar a cometer ese error). Usa integers, que a nivel
de procesador son más manejables sin ninguna clase de conversión más
que a binario; o big integers que caen en lo mismo.

5.- En PHP: preparar las consultas en lo posible. ADOdb tiene una
sintaxis que permite usar $db->Prepare(); que te valida la consulta
antes de ejecutarla, eso también es por seguridad.

6.- No hacer muchas consultas metidas dentro de ciclos, en el caso de
lo que estabas haciendo ahora, pongámosle una unidad de tiempo por
cada uno de los procesos. Para dos tablas de 10 campos:

/**
COMENTARIO:
Esto es un ejemplo que sirve más que nada para tener una idea básica
pero funcional sobre cómo se interpretan los tiempos de ejecución.
Probablemente más de alguna persona cuestionará el modelo, por eso
digo: es básico.
**/

// Usando PHP.
10 veces (una por cada registro de la tabla 1 en el array)
{
   10 veces (una por cada registro de la tabla 2 en el array)
   {
      1 para enviar
      1 esperando el resultado
      1 para procesar
   }
}

3 x 10 x 10 = 300 unidades de tiempo.

Para dos tablas de 10 campos con una sola query:

1 vez
{
    1 para enviar
    100 para recibir (10 por cada campo y sólo si hay producto cruzado
en la BD).
    1 para procesar
}

1 x 102 = 102 unidades de tiempo.

> tu que sabes ...  existe o tienes alguna documentación que me pueda
> indicar algunos hacks para aumentar la performance en el desarrollo..

Yo tengo algunas, esas son las más esenciales y que se pueden aplicar.
Otras, habría que empezar a picar en la funcionalidad que no quieres
de PHP, en lo que hace tu sistema y eso no lo manejo.

> onda para hacer el sistema lo mas liviano posible, obviamente dentro de
> las posibilidades.... sirven ideas y todo el cuento ...

> además lo otro esto lo quiero sacar luego como una versión beta pero yo
> cacho que voy a tener que conversar con la gente de derechos digitales
> pa ponerle algun tipo de licencia pa mantenerlo abierto ...

Bueno, lo destripamos acá.

-- 
Rodrigo Fuentealba Cartes
Desarrollador de Sistemas Web
Registered User 387639 - http://counter.li.org



Más información sobre la lista de distribución PHP