Foros del Web » Programando para Internet » PHP »

un index débil para cuando la bd ha colapsado

Estas en el tema de un index débil para cuando la bd ha colapsado en el foro de PHP en Foros del Web. El motivo de mi inquietud es que a mi servidor se le colapsa la BD con cierta frecuencia [no discutamos ahora que eso no tendría ...
  #1 (permalink)  
Antiguo 16/01/2003, 11:41
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta un index débil para cuando la bd ha colapsado

El motivo de mi inquietud es que a mi servidor se le colapsa la BD con cierta frecuencia [no discutamos ahora que eso no tendría por qué suceder ].

Al principio tenía yo un index.htm bastante seguro, en el sentido de que no había allí ningún llamado a una BD. Si se queria entrar (por ejemplo) a los foros y la BD estaba caída, simplemente recien allí aparecían los mensajes informando del colapso. Pero el resto del sitio transcurría tranquilo, y el visitante podía hacer todo aquello que no utilizase BD.

Fue creciendo el sitio, y ahora mi index.php se ha complicado.
Por un lado la entrada es más amable y con mayor comunicacion con el visitante, pero cada vez que se cae la BD, la entrada al sitio es horrible.

Una posible solución, que no sé si es viable, sería la siguiente:

Se produce el inicio con los contenidos del viejo índice, pero con el agregado de que ahora inquiere si la BD está viva.

Si la BD está viva, entonces llama a lo que sería el nuevo índex y mi sitio se verá como lo veo normalmente.

Si en cambio la BD está colapsada, me mantengo con los contenidos del viejo index, con el añadido de un mensaje que informa al visitante que el sitio está por el momento con sus capacidades restringidas.

¿Es posible una solución así?


Si alguien tiene alguna idea......


Gracias, bambi
  #2 (permalink)  
Antiguo 16/01/2003, 12:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En tus mysql_connect() usa:

Código PHP:
mysql_connect(....) or header("location: index_ligth.php"); exit; 
(el exit así de esa forma no lo he probado .. pero es necesario ..

Podria ser tambien:

Código PHP:
if (!mysql_connect(...)){
  
header("location: index_ligth.php");
  exit;

Es decir .. Si no conecta .. mysql_connetc devuelve un booleano con FALSE ... En ese caso .. redireccionas a otro index "ligth" donde ya informaras q "bla bla bla .. no va la BD .. asi q algunas secciones estarn deshabilitadas .. bla bla bla".

Un saludo,
  #3 (permalink)  
Antiguo 16/01/2003, 12:14
Avatar de Rnsto  
Fecha de Ingreso: marzo-2002
Ubicación: Puerto Vallarta, Mexico
Mensajes: 204
Antigüedad: 15 años, 9 meses
Puntos: 0
Disculpame que no este de acuerdo, pero tu solucion no esta en el INDEX, si no en la BD....

Y ahi se tiene que centrar la solucion, si no cualquier cosa que hagas solo estará destinada al fracaso o a una solución temporal..

Yo tambien tuve un problema parecido, y mi primer solucion era que si mi BD no respondia se cargaba un script que la reiniciaba. Sin embargo esta solucion, era muy compleja pues cada visita a mi pagina representaba una revision del Status de mi BD.

Finalmente optimice los modulos que PHP cargaba y me fueron dando mejores resultados..

Actualmente tengo un script que solo 4 veces al dia, verifica mi BD, uso MySql y via CGI reviso el MySql.SOCK

Se que esto no es la solucion que esperas, pero ojala te de ideas de como solucionarlo...
__________________
Saludos
Rnstho Luna
go2mexico.com
  #4 (permalink)  
Antiguo 16/01/2003, 12:17
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 0
Muchísimas gracias Cluster por tu rápida respuesta.

Veré ahora cómo la aprovecho, porque conozco muy pero muy poquito de php.

Saludos
  #5 (permalink)  
Antiguo 16/01/2003, 12:44
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 0
Rnsto

Posiblemente no me hice entender, y esto lo podés atribuir a que yo soy menos que un novato en cuanto a PHP, y mi manejo del lenguaje seguramente ha sido ambiguo.

El problema de las BD no está en mí, sino que se trata de un colapso donde se aloja mi sitio, y por lo que sé, somos muchos los que sufrimos cada vez que se produce ese fallo.
Quizá eso se llame de otra forma...?


Gracias
  #6 (permalink)  
Antiguo 16/01/2003, 13:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Rnsto .. lo que yo menciné es tan solo una manera de gestionar los errores que produce el uso de funciones .. en este caso de funciones de Mysql ..

Lo que hagas o como lo uses es indiferente .. Yo siempre me molesto en opimizar mi código y mis consultas a mis BD . pero si el servidor por A o B mótivo se cae .. con esa "técnica" .. puedes dar a tus usuarios una explicación mas acorde a lo q tiene q ver un ususario y no ver el error técnico y textual q arroja Mysql con una serie de errores "catastroficos" (sobre todo para el que no sabe que significan).

La ida es "personalizar" los errores de ejecución .. ni mucho menos ocultarlos.

Un saludo,
  #7 (permalink)  
Antiguo 16/01/2003, 13:45
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 50
Antigüedad: 15 años, 6 meses
Puntos: 0
Bueno, ¿y es mucho abuso si pregunto en qué forma puedo implementar esto?

Dicho brevemente, ¿cuáles son los pasos a seguir?

Gracias!
  #8 (permalink)  
Antiguo 16/01/2003, 14:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Yo ya te respondí con código de ejemplo incluso ....

usa en las funciones de uso de Mysql estructuras tipo:

mysql_xxxx() or die ("Hay un problema con Mysql .. ");

o como ya mencióne .. haces un "redireccionar" con header("location: paginaerrormysql.php") .. y muestras el error q corresponda ...

tambien puedes personalizar mas todavia los errores usando una @ delante de la funcion:

@mysql_xxxx() or die ("Hay un problema con Mysql .. ");

Con esto, ocualtas completamente el error propio de Mysql y solo muestras el tuyo personalizado. Usalo solo en fase de produccion .. no en fase de desarrollo .. pues tendras errores q no sabras de donde vienen y no los veras.

Un saludo,
  #9 (permalink)  
Antiguo 17/01/2003, 00:45
Avatar de garcef  
Fecha de Ingreso: agosto-2001
Ubicación: Querétaro, México
Mensajes: 289
Antigüedad: 16 años, 3 meses
Puntos: 0
Y varias bases

Perdón pero yo soy neofito en PHP, llegué a este mensaje por leer otro en Flash, yo manejo Access en ASP, y lo que hice para evitar el colapso fue dividir las tablas en bases así evito que se sobre cargue la base porque mientras unos usuarios entran a una otros entran a otra y asi por el estilo, eso sí a la hora de actualizar o de andar buscando un dato es despapaye pero me funciona


A la mejor mi recomendacion es medio fofa porque desconozco como funciona PHP y MySQL

__________________
garcef
Facebook: url]https://www.facebook.com/memelandiax[/url]
Twitter: @Memelandiax Vine:memelandiax Instagram: memelandiax Youtube: memelandiax
  #10 (permalink)  
Antiguo 17/01/2003, 07:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Supongo q cuando dices en "base" dividir una tabla te referiras a crear varaias tablas en "base" a un criterio ... es decir:

Supongamos una tabla que accedemos (normalmente) por el campo "nombre" .. estos nombres se pueden desglosar por orden alfabetico su primera letra de inicio quedando tablas como:

A_nombre
B_nombre
C_nombre
D_nombre

etc ...

A la hora de acceder a ellas lo primero que tendremos que hacer es formar el nombre de la tabla q se va acceder via por ejemplo (PHP se podria hacer igual con Mysql directo):

$nombre="Antonio";
$letra_inicio=$nombre[1]; // obtener la letra inicio.
$tabla_acceder=$letra_inicio.'_nombre'; // se concatena la letra inicio con el sufijo q le damos a las tablas

$sql="SELECT * FROM $tabla_acceder WHERE nombre='$nombre'";

Con ese método se complican las consultas a "toda" la BD (ya q ahora estan en varias tablas) pero igual se puede implementar.

Personalmente no me gusta este método (y lo he visto en un webmail .. @mail (escrito en Perl .. pero usa Mysql en el fondo) ...

No sé hasta q punto "evitaria un colapso" de una BD si lo q suele "colapsar" una BD son las conexiones a la BD entera .. ?

Un saludo,
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:53.