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