2008-09-01 14 views
18

Gibt es asynchrone Konnektoren für Mysql, die in einer C- oder C++ - Anwendung verwendet werden können? Ich suche nach etwas, das in eine reactor pattern geschrieben in gesteckt werden kann.Asynchrone Mysql-Konnektor

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

Antwort

7

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

Aktualisiert Link zum Original-Artikel zeigt, wie async mysql-Abfragen zu tun:

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

+1

Die Blockierung Verbindung ist ein ernstes Problem in dieser Implementierung, aber nichtsdestoweniger scheint zu tun, was ich ursprünglich angefordert habe. Das Nieselregenprojekt (https://launchpad.net/drizzle) arbeitet an einem asynchronen Client, der abwärtskompatibel mit Mysql ist (hier erwähnt: http://www.oddments.org/?p=20) –

0

Ich denke, die einzige Lösung wird sein, einen asynchronen Dienst zu erstellen, der eine standard connector umschließt. Sie müssen jedoch die ODBC-APIs verstehen.

2

Ich hatte ein ähnliches Problem mit einer ganz anderen Technologie: Twisted Python (Reaktor-basierte IO) und sqlAlchemy (??). Bei der Suche nach einer Lösung habe ich ein sAsync-Projekt gefunden, das einfach einen separaten Thread für sqlAlchemy erstellt und dann auf Anfragen geantwortet hat.

Vorausgesetzt, dass ASIO auf Low-Level-Betriebssystem-Funktionen (wie aio_read() oder ReadFileEx() usw.) und eine OS-Level-Reaktor (oder Proactor, in Windows 'Fall) Ich glaube nicht, dass Sie eine weitere Chance haben als die "Asynchronität" mit ähnlichen Mitteln nachzuahmen.

einen synchronen Anschluss in Threads laufen zu lassen ist keine Option

Denk darüber nach: die libmysqlclient/mysqlclient.dll Sie macht Anrufe Synchronbuchse verwendet wird. Der OS-Scheduler wird korrekt zu einem anderen Thread wechseln, bis die E/A beendet ist. Worin besteht der Unterschied? (Abgesehen davon, dass Sie keine 2k-Threads dafür machen sollten.)

Edit: mysql_real_connect() unterstützt einen UNIX-Socket-Parameter. Sie können sich angeblich vom mysql-Server-Port lesen und nur mit ASIO in diesen UNIX-Socket schreiben. Wie eine Proxyfizierung.

1

[einen synchronen Anschluss in Threads laufen zu lassen ist keine Option Denk darüber nach: die libmysqlclient/mysqlclient.dll Sie macht Anrufe Synchronbuchse verwendet wird. Der OS-Scheduler wird korrekt zu einem anderen Thread wechseln, bis die E/A beendet ist.]

Das nervt mich! - Der "andere Thread" könnte genauso einfach eine zweite Synchronisierung sein. Verbindung zu MySQL, und sollte von MySQL so behandelt werden, wie es ein anderer Client insgesamt wäre? Mein gutes Gefühl ist, dass es mit mehreren Threads funktionieren sollte.

+1

Es wird in Threads funktionieren. Nehmen wir an, Sie möchten 100 Verbindungen zu einem oder mehreren Servern haben. Nicht, dass ich mir vorstelle, dass irgendjemand das tun würde, sondern akzeptiere es für die Argumentation. Soll ich dann 100 Thread (oder gar nur 10 in einem Thread Pool) hochdrehen? Das ist ein ziemlich großer Overhead. –

1

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

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

Weitere Informationen: http://forums.mysql.com/read.php?167,221298

0

haben Sie als libdrizzle verwenden?Ich habe nur eine alte Version verwendet, als es ein separates Projekt von Nieselregen war, und ich habe die asynchronen Abfragefunktionen getestet, aber ich habe nie irgendwelche wirklich erwähnenswerten Benchmarks gemacht.

+0

Ich habe es genommen ein kurzer Blick auf das Drizzle-Projekt, als ich diese Frage erstellt habe (Siehe meinen Kommentar zur angenommenen Antwort). Zu dieser Zeit hatten sie einen asynchronen Client im Gange. Ich weiß nicht wirklich, wie das endete. –