Интересно, есть ли способ выполнять асинхронные вызовы базы данных?
Например, представьте, что у меня есть большой запрос, обработка которого занимает очень много времени, я хочу отправить запрос и получить уведомление, когда запрос вернет значение (путем передачи Listener / callback или чего-то еще). Я не хочу блокировать ожидание ответа базы данных.
Я не считаю, что использование пула потоков является решением, потому что он не масштабируется, в случае тяжелых одновременных запросов это порождает очень большое количество потоков.
Мы сталкиваемся с подобной проблемой с сетевыми серверами, и мы нашли решения, используя системный вызов select / poll / epoll, чтобы избежать использования одного потока на соединение. Мне просто интересно, как получить аналогичную функцию с запросом к базе данных?
Примечание. Я знаю, что использование FixedThreadPool может быть хорошим решением, но меня удивляет, что никто не разработал действительно асинхронную систему (без использования дополнительного потока).
** Обновление **
Из-за отсутствия реальных практических решений я решил сам создать библиотеку (часть finagle): finagle-mysql. Он в основном декодирует / декодирует запрос / ответ mysql и использует Finagle / Netty под капотом. Он очень хорошо масштабируется даже при большом количестве подключений.