Ich frage mich, ob es eine Möglichkeit gibt, asynchrone Aufrufe an eine Datenbank zu tätigen.
Stellen Sie sich zum Beispiel vor, ich habe eine große Anfrage, deren Bearbeitung sehr lange dauert. Ich möchte die Anfrage senden und eine Benachrichtigung erhalten, wenn die Anfrage einen Wert zurückgibt (indem Sie einen Listener / Rückruf oder etwas anderes übergeben). Ich möchte das Warten auf die Antwort der Datenbank nicht blockieren.
Ich halte die Verwendung eines Thread-Pools nicht für eine Lösung, da diese nicht skaliert werden kann. Bei starken gleichzeitigen Anforderungen wird eine sehr große Anzahl von Threads erzeugt.
Wir sind mit solchen Problemen bei Netzwerkservern konfrontiert und haben Lösungen gefunden, indem wir den Systemaufruf select / poll / epoll verwenden, um zu vermeiden, dass ein Thread pro Verbindung vorhanden ist. Ich frage mich nur, wie ich eine ähnliche Funktion mit Datenbankanforderung haben kann.
Hinweis: Ich bin mir bewusst, dass die Verwendung eines FixedThreadPool eine gute Lösung sein kann, aber ich bin überrascht, dass niemand ein wirklich asynchrones System entwickelt hat (ohne die Verwendung eines zusätzlichen Threads).
** Update **
Aufgrund des Mangels an echten praktischen Lösungen habe ich beschlossen, selbst eine Bibliothek (Teil von finagle) zu erstellen: finagle-mysql . Grundsätzlich dekodiert / decodiert es MySQL-Anfragen / Antworten und verwendet Finagle / Netty unter der Haube. Es lässt sich auch bei einer großen Anzahl von Verbindungen sehr gut skalieren.