![Serio](http://static.forosdelweb.com/fdwtheme/images/smilies/molesto.png)
Alguien tiene alguna recomendación sobre como realizar con PHP actualizaciones tipo transaccional?
![Pensando](http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif)
Gracias!
![Adios](http://static.forosdelweb.com/fdwtheme/images/smilies/adios.gif)
| |||
Pues tienes el bloqueo de tablas (no de registros como sería lo ideal .. pero menos es nada ..) Eso lo gestionas con LOCK TABLE http://www.mysql.com/doc/en/LOCK_TABLES.html http://www.mysql.com/doc/en/ANSI_diff_Transactions.html Como veras .. es Cosa de SQL de Msyql .. Un saludo, pd: dejo el mensaje en foro PHP por si alguien se le ocurre otras alternativas ..
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| ||||
He estado leyendo un poco respecto al bloqueo de tablas, y parece no ser muy recomendable para hacer transacciones, ya que independientemente del resultado de las inserciones o actualizaciones, solo bloquea y luego desbloquea. Yo estaba pensando en algo más, algo así como guardar todas las instrucciones SQL de la operación en un archivo de texto temporal, y luego al final hacer una conexión por socket a la BD y entregarle el archivo .sql para correr todas las instrucciones en un solo golpe. El problema es que lo anterior tiene el mismo problema, si una de las instrucciones resulta en un error, simplemente se lo brinca... ![]() Pensemos en mi caso particular: Para completar una reservación, el script debe hacer cuatro cosas... 1.- Guardar los datos de la reservación 2.- Asignar un chofer para hacer el viaje 3.- Enviar instrucciones al usuario y al chofer 3.- Registrar el importe de la operación en las cuentas por cobrar Te imaginas que pasaría si el paso 4 no fuera completado? se daría el servicio y no quedaría rastro de la deuda!! Alguna idea?
__________________ Manoloweb |
| |||
No sé .. creo que no tienes que buscarles 3 pies al gato .. Cambiate la versión de Mysql (desde 4.0.x ya soporta el COMINT y todo el asunto ese ..) o bien usa tablas InnoB o te cambias a PostgreSQL . Mysql "es para lo q es" (por lo menos hasta la versión 3.2x.x De todas formas .. Como bien dice el própio manual de Mysql en esas funciones .. la mayoría de veces te puedes evitar usar el "LOCK Tables" si usas "ID's" de registros Autonuméricos y Únicos .. Yo hago algunos procesos así .. y lo que hago es guardarme el ID que se genera de crear el registro (en tu caso) del punto 1 ... y con ese ID (que me lo suelo guardar en una session) continúo el resto del proceso de creación de registros en las otras tablas de tu BD .. (si el proceso ha de hacerse entre varias páginas ...) Y si el proceso se hace en un mismo "script" que lance esas consultas .. Pues una de dos: o confio en el que el proceso es rápido (el "thread" ..) y no bloqueo tablas .. o las bloqueo .. Y si aun así no estoy seguro de la operación .. (no me ha sucedido todavía) .. Cambiaria de versión de Msyql o de motor de base de datos .. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
(ahhh.. pues ahí .. "ajo y agua xDD" .. no hay mas que ajo-derse y agua-ntarse jeje .. Usa al menos LOCK TABLES y cruza los dedos xDD) Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
apartir de la version 3.23.38a de Mysql, el manejo de tablas innodb ya esta incluido en los fuentes originales, solo hay que compilar mysql en el caso de sistemas *NIX, el uso de estas tablas, para version 4 se compila de default. en sistemas windows si es tu caso las versiones recientes ya las traen y se cargan de forma predeterminada o almenos la ultima version de la serie 3.23 que prove, para hacer replicacion entre un servidor windows 2000 y un servidor en linux. Las innodb para version 3.23 y 4.0 son las mismas. Lo que te puedo recomendar es que si tienes algunas de estas versiones uses las tablas innodb o coviertas las MyISAM que estes usando a este ultimo tipo. y te proporciona soporte completo para todos los niveles de aislamiento del ANSI SQL, READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, y SERIALIZABLE. Creo que implementando esto le brindaras un mejor servicio a tus clientes. y te evitaras reclamaciones si un dia falla un query, con el bloqueo de tablas. que pasaria si un dia reinician el serivicio, o se va la luz. o hay una falla de harware. Y ha usarlas sin miedo que, se han estado provando desde el 2001 , en sitios grandes con buenos resultados. |
| |||
Parece Herminio Heredia San .. que el problema está en la versión de Msyql que trabaja su servicio de Hosting .. Así ... q .. o sigue con el mismo y reza para que no ocurra algunos de estos problemas .. o busca algun servicio de hosting que usen esas versiones de Msyql que comentas. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Si ya vi mi error, me tarde en contestar y en unos minutos ya habia cambiado el hilo de la conversacion. Cita: bueno manolo, desconosco tu experiencia y tus avilidades, Pero creo que como desarrollador debes de asesorar a tu cliente a ese respecto, debes de calcular los riesgos y presentar un paquete completo con la solucion que es mas conveniente, con todas las condiciones que se requieren para implementarla como incluir un cambio de hosting si no pueden darte el servicio.PD.- No puedo cambiar la versión de MySQL en el servidor, ya que es un hosting pagado en la modalidad "shared resources", donde varios usamos el mismo apache, php y mysql... En el caso que comentaba hace un momento. se tuvo que actualizar las versiones de mysql en un servidor de windows y un servidor en unix de pago. ademas de instalar una linea adsl, con ip fija para que el servidor en windows replicara su base de datos al servidor de pago. asi fue el plan, pero dentro de la solucion estaba el plan alterno de cambio de servidor de pago si no podian o no querian brindar el servicio. esa fue la solucion que escogieron de las que se les brindo, todo depende de que valor representan los datos para el cliente y que este consciente de eso y hay tu juegas un papel importante. Asi que tal vez una opcion es que le presentes varias soluciones y el riesgo que implican, y que ellos decidan. si quieren rezar un ave maria cada dia para que no pase nada o dormir tranquilos. |