Foros del Web » Programando para Internet » PHP »

Eficiencia en base de datos.

Estas en el tema de Eficiencia en base de datos. en el foro de PHP en Foros del Web. Buenas: Veréis estoy creándome mi propio Framework para PHP y quería consultaros una duda que me ha surgido. Mi Framework hace uso de la base ...
  #1 (permalink)  
Antiguo 24/07/2011, 09:12
jpeeri
Invitado
 
Mensajes: n/a
Puntos:
Eficiencia en base de datos.

Buenas:

Veréis estoy creándome mi propio Framework para PHP y quería consultaros una duda que me ha surgido. Mi Framework hace uso de la base de datos para todo.

Por poneros un ejemplo. La primera vez que entramos al index.php

- Comprueba que eres usuario (no hace consulta porque no tienes una cookie, pero si la tuviese comprobaría en la base de datos el hash).

- Comprueba que el sitio está encendido (Hace una consulta a la tabla settings y comprueba que siteoff tiene valor 1)

- Recoge el nombre de la sección en la que estamos (en el caso de estar en index.php hace una consulta a la tabla settings que le dice el startpage) y comprueba que exista una sección inicializada en la tabla sections, si existe carga la sección correspondiente

- Comprueba que tienes permisos para leer la página (Hace una consulta a la tabla permissions y hace las comprobaciones necesarias).

- Se carga el theme por defecto, etc.

Vamos, que a lo tonto a lo tonto me hace como 20 consultas a la base de datos.

Y aquí viene mi problema. Hasta ahora he estado usando mi framework de la siguiente manera. (Por ejemplo pongo la función que me da los valores de los settings.

Código PHP:
function getSettingsValue($name){
$dbConn Database::getConnection("user"// Lanza una conexión en modo usuario (hay dos tipos de usuarios en la BD y éste tiene muchas limitaciones, por si acaso).


$obj Database::selectObj("settings""value""name = $name"// SELECT  value FROM settings WHERE name = $name

Database::close($dbConn);

return 
$obj['value'];


Claro, lo que vengo pensando ahora es que menuda estoy montando abriendo y cerrando conexiones de bases de datos cuando podría unificarlo todo en una poniendo al inicio del index.php el connect y al final el close.

Que es mejor? como lo estoy haciendo o de la otra forma?

Saludos.
  #2 (permalink)  
Antiguo 24/07/2011, 09:18
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Eficiencia en base de datos.

Y haces eso por cada consulta?
no es un exceso?
yo dejaria abierta la coneccion al principio y la cerraria al final del srcipt
  #3 (permalink)  
Antiguo 24/07/2011, 09:22
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Eficiencia en base de datos.

Cita:
Iniciado por Patriarka Ver Mensaje
Y haces eso por cada consulta?
no es un exceso?
yo dejaria abierta la coneccion al principio y la cerraria al final del srcipt
Al igual que con mysql_free_result(), es poco, pero mejorarás el rendimiento.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #4 (permalink)  
Antiguo 24/07/2011, 09:23
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 9 meses
Puntos: 81
Respuesta: Eficiencia en base de datos.

Bueno, la verdad lo veo bastante ineficiente por lo mismo que tú has notado y te surge la duda. Te daré un pequeño consejo, entre menos consultas a la base de datos, pero a veces no se puede hacer todo de un solo golpe. Usa INNER JOIN para obtener datos de mas de una tabla, y nada, trata de usar las menos consultas posibles. También, quítate la manía de cerrar conexiones y volverlas a abrir. En realidad, nunca hace falta cerrar una conexión porque cuando el código termina de procesarse se cierra sola. Estoy seguro que algún purista dirá que si hace falta para liberar memoria, y yo le diré. Bueno, si quieres liberar memoria, liberara, pero solo cuando ya no hace falta otro acceso a la base de datos.

Ese sería mi comentario. Suerte!
  #5 (permalink)  
Antiguo 24/07/2011, 09:26
jpeeri
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Eficiencia en base de datos.

Vale queda claro que lo que estaba haciendo es totalmente ineficiente...

Pues voy a hacerlo como sospechaba que debía hacerlo.

Muchas gracias :)

PD: mysql_free_result se hace automaticamente al final de la llamada Database::selectObj()
  #6 (permalink)  
Antiguo 24/07/2011, 09:28
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 9 meses
Puntos: 81
Respuesta: Eficiencia en base de datos.

Algo que puede también aumentar la eficiencia de la base de datos son los procedimientos almacenados de MySQL. Aunque creo que en este caso no es aplicable, en otros si podría servirte mucho. Suerte!

Etiquetas: eficiencia, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.