Quiero preguntar cuál podría ser la mejor solución para la aplicación Java multiproceso para garantizar que todos los subprocesos accedan db de forma síncrona. Por ejemplo, cada hilo representa una transacción separada, y primero verifica el valor de db y luego, dependiendo de la respuesta, tiene que insertar o actualizar algunos campos en la base de datos (nota entre verificación, inserción y aplicación de confirmación está haciendo otros procesamientos). Pero el problema es que otro hilo podría estar haciendo exactamente lo mismo en la misma mesa. Ejemplo más específico. El subproceso T1 inicia la transacción, luego verifica la tabla ENTITY_TABLE para ingresar con el código '111' si se encuentra la fecha de actualización, si no se encuentra, inserta una nueva entrada y luego confirma la transacción. Ahora imagine que el hilo T2 hace exactamente lo mismo. Ahora hay algunos problemas: 1. T1 y T2 comprueban db y no encuentran nada y ambos insertan la misma entrada. 2. T1 comprueba db, encuentra la entrada con una fecha anterior, pero en la confirmación T2 ya tiene la entrada actualizada en una fecha más reciente. 3. Si usamos la memoria caché y sincronizamos el acceso a la memoria caché, tenemos un problema: T1 adquiere las comprobaciones de bloqueo db y la memoria caché si no se encuentra agrega a la memoria caché, suelta el bloqueo, confirma. T2 hace lo mismo, encuentra que la entrada en el caché va a comprometerse. Pero la transacción T1 falla y está respaldada. Ahora T2 está en mal estado, porque debería insertarse en ENTITY_TABLE pero no lo sabe. 4. más?Acceso a la base de datos de subprocesos múltiples de Java
Estoy trabajando en la creación de memoria caché personalizada simple con la sincronización y solución de problemas 3. Pero estoy interesado tal vez hay una solución más simple? ¿Alguien tuvo que resolver un problema similar? ¿Como lo hiciste?
Gracias por una respuesta. La cuestión es que la aplicación debe ser muy eficiente, puede ejecutarse en 16 o incluso 32 subprocesos. Y cada transacción comienza, procesa mucho, luego toma resultados y realiza inserciones y actualizaciones en el paso de confirmación, todo en lotes jdbc (para rendimiento). Entonces la transacción está comprometida. De todos modos, en mi situación, el nivel serializable sería demasiado, especialmente para 32 hilos. Espero ser capaz de resolver esto con caché en la aplicación Java. – nesvarbu