Me pregunto si hay una manera de hacer llamadas asíncronas a una base de datos?¿Es posible la llamada jdbc asincrónica?
Por ejemplo, imagine que tengo una gran solicitud que lleva mucho tiempo procesar, deseo enviar la solicitud y recibir una notificación cuando la solicitud devuelva un valor (pasando un Listener/callback o algo) No quiero bloquear esperando a que la base de datos responda.
No considero que el uso de un grupo de subprocesos sea una solución porque no se escala, en el caso de solicitudes simultáneas pesadas esto generará una gran cantidad de subprocesos.
Nos enfrentamos a este tipo de problema con los servidores de red y hemos encontrado soluciones utilizando la llamada al sistema select/poll/epoll para evitar tener un hilo por conexión. Me pregunto cómo tener una función similar con la solicitud de la base de datos.
Nota: Soy consciente de que usar FixedThreadPool puede ser una buena solución, pero me sorprende que nadie haya desarrollado un sistema realmente asincrónico (sin el uso de un hilo adicional).
** Actualización **
Debido a la falta de soluciones prácticas reales, decidí crear una biblioteca (parte de fingle) yo mismo: finagle-mysql. Básicamente decodifica/decodifica solicitud/respuesta de mysql y usa Finagle/Netty debajo del capó. Se escala extremadamente bien incluso con una gran cantidad de conexiones.
Consulte http://code.google.com/p/async-mysql-connector/wiki/UsageExample –
Vea también https://github.com/mauricio/postgresql-async –
El problema es cómo podría notificar el db el cliente cuando termina la consulta. Uno sería (por ejemplo) que Oracle use la función "Notificación de cambio de resultado de consulta de base de datos" y se lo notifique cuando cambien los datos de db. Esto se aplica a las consultas SQL que modifican los datos de base de datos Para las consultas de solo lectura, esto no funcionaría. Por otro lado, no estoy seguro de que hacer conexiones asincrónicas sería una buena idea, ya que establecerlas es costoso. Por supuesto, esta no es una solución muy general. Solo comida para pensar ... –