/ / ¿Cómo manejar la lógica de la aplicación web y la concurrencia de bases de datos? - web, concurrencia, condición de carrera, concurrencia de base de datos

¿Cómo manejar la lógica de la aplicación web y la concurrencia de bases de datos? - web, concurrencia, condición de carrera, concurrencia de base de datos

Digamos que tengo una mesa llamada items. El usuario de mi aplicación web puede borrar la fila de items mesa, pero no quiero dejar la mesa vacía.

Así que actualmente tengo un código como este en mi aplicación:

if (itemsCount() <= 1) {
don"t delete;
}
else {
delete;
}

Pero me doy cuenta de que este código es vulnerable a problemas de concurrencia. Por ejemplo si actualmente el tamaño de items es 2, y hay dos subprocesos que ejecutan este código casi al mismo tiempo, la tabla puede quedar vacía.

Creo que este problema es bastante común para las personas que escriben aplicaciones web. La gente ya debería haberlo resuelto. ¿Cuáles son las soluciones disponibles para esto?

Respuestas

0 para la respuesta № 1

La solución más común es usar una transacción.Gerente. En su caso, el Administrador de transacciones coordinará la ejecución del hilo para asegurarse de que solo un hilo a la vez acceda y actualice la tabla.

No mencionó qué idioma y qué tipo de entorno está utilizando, pero asumiendo que es Java y JEE, la administración de transacciones es bastante fácil. aquí.