2012-03-01 21 views
9

Si tengo una secuencia de comandos php que invoca INSERTAR, ACTUALIZAR, ELIMINAR, etc. en una conexión MySQL, y esa secuencia de comandos recibe una llamada no controlada en una operación POST, siempre es "seguro" (es decir, no dará lugar a tablas corruptas o colisiones durante las solicitudes)?¿MySQL es "seguro para hilos" desde un script php?

Por ejemplo, si llegan 500 solicitudes durante un período de 1 segundo.

Si es así, ¿cómo lo consigue php/mysql?

Si no es así, ¿qué hay que hacer para garantizar el acceso "en serie" o el acceso simultáneo seguro?

+1

'BEGIN; ... hacer trabajo ...; COMMIT; ' –

Respuesta

9

MySQL usa el bloqueo (nivel de tabla para MyISAM o nivel de fila para InnoDB), que no permite 2 procesos (2 llamadas al script) para modificar la misma fila. Por lo tanto, la tabla no se bloqueará *, pero es posible que MySQL no pueda gestionar el número de solicitudes en tiempo razonable y las solicitudes esperarán. Siempre debe optimizar sus consultas para que sean lo más rápidas posible.

* MyISAM podría bloquearse en aplicaciones intensivas de inserción/actualización, pero tiene recuperación automática. Sin embargo, tenga en cuenta que en dicha aplicación, InnoDB tiene un mejor rendimiento

+1

Hubo muchas respuestas excelentes a esta pregunta; No puedo creer la velocidad y la respuesta de la comunidad en este caso, gracias.Creo que algunas de las otras respuestas pueden ser más instructivas para alguien que busca construir una implementación sólida a nivel empresarial, si ese es usted, consulte a continuación. Sin embargo, estoy tratando de hacer lo mínimo posible y simplemente quería saber si MySQL podría manejar muchas solicitudes simultáneas. La respuesta es sí a cualquier persona a la que no se le paga específicamente para saber otra respuesta. Gracias Darhazer. – SG1

2

¿es siempre "seguro" (es decir, no dará lugar a tablas o colisiones corruptas durante las solicitudes)?

Si es así, ¿cómo? Php/mysql lograr esto?

bloqueos de tabla/fila.

0

Creo que la terminología que busca es transacciones y niveles de aislamiento. Si se configuran de acuerdo con sus requisitos, no necesita preocuparse por las colisiones. Aquí está el tutorial en how it works.

1

Por lo general, las bases de datos son sólidas a las colisiones, sin embargo, hay operaciones importantes que deben completarse o descartarse. Piense en un depósito en efectivo en una cuenta bancaria.

Para lograr este resultado se podría estar interesado en el uso de transacciones:

PHP + MySQL transactions examples

2

MySQL utiliza bloqueos para Isoloation y transactions de atomicidad. Las transacciones requieren InnoDB o BDB. InnoDB admite compatibilidad total con ACID.

Las cerraduras y las transacciones, combinadas, resolverán su problema de simultaneidad.

Por defecto, MySQL tiene implicit transactions.

Aprende definitivamente sobre estas características para ver si se ajustan a la factura. MyISAM utiliza bloqueo de tabla, mientras que InnoDB proporciona bloqueo de nivel de fila, por lo que uno puede satisfacer sus necesidades mejor que el otro.

Cuestiones relacionadas