Foros del Web » Programando para Internet » PHP »

Segmentar Consultas en PHP

Estas en el tema de Segmentar Consultas en PHP en el foro de PHP en Foros del Web. Hola a todos, Lo que sucede es q estoy desarrollando un sistema que requiere sincronizar unas bases de datos q manejan millones de registros, lo ...
  #1 (permalink)  
Antiguo 11/07/2009, 14:33
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Segmentar Consultas en PHP

Hola a todos,

Lo que sucede es q estoy desarrollando un sistema que requiere sincronizar unas bases de datos q manejan millones de registros, lo cual implica que en algunos momentos se harán consultas que requieren mucho tiempo de ejecución pues son tablas q manejan millones de registros.

La pregunta q tengo es como hacer para poder correr dichas consultas sin que apache se cuelge?? El sistema se ha desarrollado sobre PHP Las consultas las realizaré sobre Oracle y Mysql pues algunas tablas en estas bases de datos deben estar sincronizadas. Desde ya gracias.
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #2 (permalink)  
Antiguo 11/07/2009, 14:46
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Segmentar Consultas en PHP

Lo mejor es que solo uses como gestor a MySQL
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #3 (permalink)  
Antiguo 11/07/2009, 14:56
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Segmentar Consultas en PHP

Es Imposible por q ya existen dos Sistemas desarrollados y no se pueden cambiar, esas dos bases de datos seguiran existiendo y manejando los registros.

En el caso de trabajr solo con MySql como podria segmentar las consultas para q apache no se colgara?
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #4 (permalink)  
Antiguo 11/07/2009, 14:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Segmentar Consultas en PHP

Lo mejor en ese caso es que ejecutaras un procedimiento almacenado en la base de datos y que mandaras llamar el archivo en segundo plano, así evitas que Apache y el cliente esten esperando datos y mejor el cliente reciba una notificación cuando termino el proceso.

Saludos.
  #5 (permalink)  
Antiguo 11/07/2009, 15:04
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Segmentar Consultas en PHP

Gracias GatorV.

El inconveniente es q en este caso el Administrador debe correr Manualmente la sincronización, es un requerimiento, en teoria el sitema ya se actualiza automaticamente, es decir, cuando se realizan registros en Oracle ya hay servicios q los insertan, actualizan o eliminan en Mysql.

Pero la sincronización debe asegurar que las tablas esten siempre iguales y el sistema de sincronización debe existr por si en algun momento alguna de estas bases de datos se cae entonces debe existir la manera de sincronizarlas.

Que opinan?
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #6 (permalink)  
Antiguo 11/07/2009, 15:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Segmentar Consultas en PHP

Puedes usar en ese caso un cron job (tarea programada) para ejecutar el archivo, aunque viendo lo que entonces requieres hacer, tu solucion esta fuera de PHP.

Oracle te permite programar un procedimiento almacenado (al igual que MySQL) (se conoce como Trigger) al hacer algún cambio en alguna tabla.

Lo que te recomendaría es que crearas el trigger en Oracle que inserte directamente en MySQL así podrías tener tus datos sincronizados ya que se va a actualizar directamente al hacer un cambio en la base de datos.

Saludos.
  #7 (permalink)  
Antiguo 11/07/2009, 15:26
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Segmentar Consultas en PHP

Gracias GatorV.

Eso es lo q se hace actualmente, Unos trigger registran esos cambios en una tabla de Oracle, q luego y Cron las trae a Mysql. Eso pasa cada vez que se realiza el un cambio en el sistema por medio del sistema, pero en ocasiones se cargarán cientos o miles de registros por debajo, es decir, se cargaran datos de diferentes formas. de esos procedimientos no tenemos control ninguno.

Eso significa que cuando se carguen esos registros de manera manual no pasaran por los triggers y obviamente no se cargarán a Mysql. O también puede pasar que se carguen cosas en Mysql y no deban estar, entonces el sistema de sincronización se debe desarrollar para que en cualquier momento el administrador del sistema realiza los análisis respectivos y comparar las tablas de Oracle y Mysl y conocer las inconsistencias entre las tablas y poder sincronizarlas de manera manual.

Como comente antes la idea es realizar las consultas de cada una de las tablas de Oracle y de Mysql en una tabla en Mysql almacenar el registro inicial y el registro final q analizo y luego de conocer las diferencias de manera manual autorizar la sincronización. Como esos análisis se realizarán en tablas q cambian constantemente y e incrementan el numero de registros de manera muy rápida (Aproximadamente 1000 registros por segundo) seguramente los servidores no permitirán q esas consultas se realicen pues exederían el tiempo máximo de ejecución


No se si me estoy explciando claramente, de todas formas gracias por tu aporte y el de todos sin duda me ira dando ideas y pistas.
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #8 (permalink)  
Antiguo 11/07/2009, 15:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Segmentar Consultas en PHP

Como te comento, si usas un trigger directamente no tendrías ese problema ya que el trigger se ejecuta en el INSERT/UPDATE de tu tabla.

Ahora hacer lo que quieres ya te comente, programa tu script y ejecutalo de forma automatica usando un Cron Job, así no es necesario que el administrador lo ejecute.

Ejecutarlo vía HTTP es lo peor que puedes hacer por el volumen que especifícas, lo mejor es ejecutarlo directo en el servidor y que el servidor te informe al terminar de ejecutar el script.

Saludos.
  #9 (permalink)  
Antiguo 11/07/2009, 16:01
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Segmentar Consultas en PHP

Vale GatorV.

Gracias por la ayuda, tienes razón y esa es mi principal preocupación. Lo q haré es crear dichos script y q sea el administrador quien los active o desactive los cron para que desde los cron corra esos scripts pues como comente es el administrador quien debe activar el proveso de sincronización de manera manual. Esto también se ha solicitado de esta manera pues deben obtener estadisticas de quien activo la sincronización, IP, Hora, registros sincronizados etc.

Ahora la pregunta es esto se podría hacer? es decir q desde una interfaz grafica el pueda activar o desactivar algunos cron?

Gracias por la ayuda.
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #10 (permalink)  
Antiguo 11/07/2009, 16:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Segmentar Consultas en PHP

Si el administrador es el que lo va a ejecutar en ese caso el cron no te sirve para nada, el cron sirve para ejecutar una tarea de una forma recurrente.

Lo que tienes que hacer es desde la pagina web ejecutar el script en segundo plano (usando exec, system, etc.) para que se inicie el proceso y te notifique de alguna forma al terminar.

Saludos.
  #11 (permalink)  
Antiguo 11/07/2009, 16:36
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Segmentar Consultas en PHP

GatorV cuando t refieres al Script t refieres a todo el script q hará las consultas? Ese script permitirá hacer consultas y actualizaciones sobre la base de datos? en caso de ser así dicho script podrá estar en php?

Gracias.
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #12 (permalink)  
Antiguo 11/07/2009, 16:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Segmentar Consultas en PHP

Así es me refiero a ese script que va a "sincronizar" tus tablas, claro puede estar en PHP, o puedes crearlo en otro lenguaje, exec()/system() etc. sirven para hacer llamadas a la consola directo del servidor.

Saludos.
  #13 (permalink)  
Antiguo 11/07/2009, 16:42
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Segmentar Consultas en PHP

Vale GatorV,

Muchas gracias por al ayuda y la paciencia. Lo probaré y les contaré como va, seguro puede servirle a muchos en otros momentos.

Un saludo
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
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 15:06.