martes, diciembre 13, 2005

Una lección del mysql

Evitar sobre manera los updates y deletes. Explicación:

Por ejemplo, en un sistema de mensajeria se suele tener un campo destinado a almacenar el numero total de mensajes del usuario. Y cuando el usuario mande un mensaje, se actualice ese campo (y el campo correspondiente al usuario al que va destinado el mensaje). Total, eso implica que para mandar un mensaje se hace un select y dos updates. La operación de ver cuantos mensajes tiene ese usuario es un select de ese campo.

Otra forma de hacerlo es no guardar para nada ese campo. Asi cuando un usuario quiere ver el número de mensajes que tiene, se hace un select count de sus mensajes.

La primera forma parece mas óptima, pero en realidad con cargas grandes en un sistema con mysql no lo es. El motivo es que mysql bloquea toda la tabla cuando se hacen updates/deletes. Como tenemos dos updates en una operacion de enviar un mensaje, el porcentaje de tiempo de tabla bloqueada seria muy grande cuando llegan los momentos criticos de uso del sistema.

La segunda opcion, menos 'eficiente' desde el punto de vista de número de operaciones y complejidad a realizar, y que encima realiza operaciones redundantes, es mucho mejor desde el punto de vista de la concurrencia, porque evita bloqueos.

En mysql, a costa de unos insert ultra-rápidos, los updates son muy costosos, por eso es necesario evitarlos a toda costa.

No hay comentarios:

Publicar un comentario

Cómo utilizar el servicio Secrets Manager para guardar las claves privadas de SSH

Para guardar la clave privada en el servicio Secrets Manager como un secreto en modo texto sin formato, sigue estos pasos Supongamos que la ...