Zastanawiam się, czy istnieje sposób na wykonywanie asynchronicznych wywołań do bazy danych?
Na przykład wyobraź sobie, że mam duże żądanie, którego przetworzenie zajmuje bardzo dużo czasu, chcę wysłać żądanie i otrzymać powiadomienie, gdy żądanie zwróci wartość (przekazując Listener / callback lub coś w tym rodzaju). Nie chcę blokować czekania na odpowiedź bazy danych.
Nie uważam, że użycie puli wątków jest rozwiązaniem, ponieważ nie jest skalowalne, w przypadku ciężkich współbieżnych żądań spowoduje to powstanie bardzo dużej liczby wątków.
Mamy do czynienia z tego rodzaju problemem z serwerami sieciowymi i znaleźliśmy rozwiązania za pomocą wywołania systemowego select / poll / epoll, aby uniknąć posiadania jednego wątku na połączenie. Zastanawiam się tylko, jak mieć podobną funkcję z żądaniem bazy danych?
Uwaga: zdaję sobie sprawę, że użycie FixedThreadPool może być dobrym obejściem, ale jestem zaskoczony, że nikt nie opracował systemu naprawdę asynchronicznego (bez użycia dodatkowego wątku).
** Aktualizacja **
Ze względu na brak realnych praktycznych rozwiązań postanowiłem sam stworzyć bibliotekę (część finagle): finagle-mysql . Zasadniczo dekoduje / dekoduje żądanie / odpowiedź mysql i używa Finagle / Netty pod maską. Bardzo dobrze skaluje się nawet przy dużej liczbie połączeń.