Frage

Gibt es asynchrone Konnektoren für MySQL, die in einer C- oder C++-Anwendung verwendet werden können?Ich suche etwas, das an ein angeschlossen werden kann Reaktormuster geschrieben in Boost.Asio.

[Bearbeiten:] Das Ausführen eines synchronen Connectors in Threads ist keine Option.

War es hilfreich?

Lösung

http://forums.mysql.com/read.php?45,183339,183339genießen

Aktualisierter Link zum Originalartikel, der zeigt, wie man asynchrone MySQL-Abfragen durchführt:

http://jan.kneschke.de/projects/mysql/async-mysql-queries-with-c-api/

Andere Tipps

Ich hatte ein ähnliches Problem mit einer ganz anderen Technologie:Twisted Python (reaktorbasiertes IO) und sqlAlchemy (??).Bei der Suche nach einer Lösung stieß ich auf ein sAsync-Projekt, das einfach einen separaten Thread für sqlAlchemy erstellte und dann auf Anfragen reagierte.

Angesichts der Tatsache, dass ASIO auf Betriebssystemfunktionen auf niedriger Ebene (wie aio_read() oder ReadFileEx() usw.) und einem Reaktor auf Betriebssystemebene (oder Proaktor im Fall von Windows) basiert, glaube ich nicht, dass Sie eine andere Chance haben, als das zu emulieren. Asynchronität‘ auf ähnliche Weise.

Das Ausführen eines synchronen Connectors in Threads ist keine Option

Denk darüber nach:Die libmysqlclient / mysqlclient.dll Sie verwenden, führt synchrone Socket-Aufrufe durch.Der Betriebssystem-Scheduler wechselt korrekt zu einem anderen Thread, bis die E/A abgeschlossen ist. Was ist also der Unterschied?(abgesehen davon, dass man dafür keine 2k-Threads erstellen sollte..)

Bearbeiten:mysql_real_connect() unterstützt einen UNIX-Socket-Parameter.Sie können angeblich nur mit ASIO vom MySQL-Server-Port lesen und auf diesen UNIX-Socket schreiben.Wie eine Stellvertretung.

[ Wenn Sie einen synchronen Anschluss in Threads ausführen, ist keine Option darüber nachgedacht:Die von Ihnen verwendete libmysqlclient / mysqlclient.dll führt synchrone Socket-Aufrufe durch.Der Betriebssystem-Scheduler wechselt ordnungsgemäß zu einem anderen Thread, bis die E/A abgeschlossen ist]

Das geht mir auf die Nerven!- Der „andere Thread“ könnte genauso gut eine zweite Synchronisierung sein.Verbindung zu MySQL und sollte von MySQL genauso gehandhabt werden, wie es ein anderer Client insgesamt tun würde?Mein Bauchgefühl ist, dass es mit mehreren Threads funktionieren sollte.

MySQL Connector/C++ ist eine C++-Implementierung von JDBC 4.0

Die Referenzkunden, die MySQL Connector/C++ nutzen, sind:- OpenOffice – MySQL Workbench

Erfahren Sie mehr: http://forums.mysql.com/read.php?167,221298

Es gibt ein Projekt namens DBSlayer, das eine weitere Ebene vor MySQL platziert, mit der Sie über JSON kommunizieren. http://code.nytimes.com/projects/dbslayer

Haben Sie darüber nachgedacht, es zu verwenden? libdrizzle?Ich habe nur eine alte Version verwendet, als es ein von Drizzle getrenntes Projekt war, und ich habe die asynchronen Abfragefunktionen getestet, aber ich habe nie nennenswerte Benchmarks durchgeführt.

Ich denke, die einzige Lösung wird darin bestehen, einen asynchronen Dienst zu erstellen, der a umschließt Standardstecker.Sie müssen jedoch die ODBC-APIs verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top