Foros del Web » Programando para Internet » PHP »

Transacciones simuladas...

Estas en el tema de Transacciones simuladas... en el foro de PHP en Foros del Web. Eso, en vista de que MySQL no maneja transacciones (al menos en tablas MyISAM)... Alguien tiene alguna recomendación sobre como realizar con PHP actualizaciones tipo ...
  #1 (permalink)  
Antiguo 19/04/2003, 01:10
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Pregunta Transacciones simuladas...

Eso, en vista de que MySQL no maneja transacciones (al menos en tablas MyISAM)...

Alguien tiene alguna recomendación sobre como realizar con PHP actualizaciones tipo transaccional?


Gracias!
__________________
Manoloweb
  #2 (permalink)  
Antiguo 19/04/2003, 01:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
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.
  #3 (permalink)  
Antiguo 19/04/2003, 01:32
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
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
  #4 (permalink)  
Antiguo 19/04/2003, 01:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
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.
  #5 (permalink)  
Antiguo 19/04/2003, 01:58
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Tienes razón, puede ser pura paranoia

De todos modos dejo abierta la posibilidad de recibir alguna sugerencia creativa e innovadora (innoDBadora?)



Gracias!
__________________
Manoloweb
  #6 (permalink)  
Antiguo 19/04/2003, 02:00
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
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...
__________________
Manoloweb
  #7 (permalink)  
Antiguo 19/04/2003, 02:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
(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.
  #8 (permalink)  
Antiguo 19/04/2003, 02:13
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
__________________
Manoloweb
  #9 (permalink)  
Antiguo 19/04/2003, 02:33
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 16 años, 2 meses
Puntos: 6
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.
  #10 (permalink)  
Antiguo 19/04/2003, 02:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
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.
  #11 (permalink)  
Antiguo 19/04/2003, 03:36
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 16 años, 2 meses
Puntos: 6
Si ya vi mi error, me tarde en contestar y en unos minutos ya habia cambiado el hilo de la conversacion.

Cita:
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...
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.
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.
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 23:11.