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