Frage

Ich bin der Hoffnung, jemand hier könnte mir helfen.

Die Firma für die ich arbeiten würde es vorziehen, dass ich verwenden MySQL anstelle von MSSQL. Also habe ich heruntergeladen den neuesten Treiber (6.1) und bin Portierung des DB-Schicht.

Allerdings kann ich nicht die BeginExecuteReader Funktion finden, die einen Rückruf als Parameter annimmt.

Ist das für einen Grund? Oder ist es anders mit MySQL arbeiten?

Soweit ich es sehen kann, wenn der Code nicht einen Rückruf nicht erhöhen, würde ich abfragen müssen, auf die sie langsam macht. einen Sperr Thread pro Verbindung verwendet, ist auch zu vermeiden, etwas, was ich will.

Wer Ideen, wie dies zu bewältigen? (Abgesehen von dem Fahrer zu verändern, die wahrscheinlich über meine Kräfte ist)

R

War es hilfreich?

Lösung

Version 6.3.4 des MySQL Connector implementiert Methoden Asynchron aber es scheint, dass es nur einen Delegierten ruft asynchron, so dass es an die aufrufende Thread nicht blockiert sein wird, aber es wird keine Threads aus dem Threadpool speichern. Hier ist der Bug-Report zu diesem .

Und, wie Sie gesagt haben, ist es nicht einen Rückruf Parameter haben. Hier ist der Bug-Report zu diesem .

ich glaube, devart der Datenanbieter richtig async Methoden implementieren, aber sie sind nicht frei.

Wie auch immer, Asynchron-Datenbank Anrufe bedeuten nicht, eine insgesamt bessere Skalierbarkeit für sich. Ich empfehle den Artikel "

Andere Tipps

Ich weiß nicht, über diesen Connector speziell, aber jeder andere Stecker i für mysql gesehen habe wartet nur für den Server die Daten während der execute () oder query () Anruf zurückzukehren. in der Nähe erhalten Sie, wird die „unbuffered“ Version, die sofort von execute () oder query () zurückgibt, aber blockiert, wenn Sie die nächste Zeile zu beantragen versuchen, aber es hat sich aus dem MySQL-Server noch nicht angekommen.

MySQL Thread-Unterstützung scheint mir im Grunde ein nachträglicher Einfall zu sein.

Sie können nicht zum Beispiel über den C-API, kündigen eine ausgegebenes Abfrage; vielmehr die Abfrage-Funktion einfach blockiert. Um mehrere gleichzeitige Abfragen zu machen, wird ein Thread benötigt pro Abfrage!

Versuchen Sie Postgres verwenden. Ich habe es nicht (die C-API hat mich aus - all diese typedefs) verwendet., Aber es hat auf jeden Fall die richtige Unterstützung für Multi-Threaded-Abfragen (z Asynchron-Anrufe usw.)

scroll top