2008-09-01 10 views

答えて

7

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

非同期mysqlのクエリを実行する方法を示す元の記事への更新リンクを楽しむ:

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

+1

ブロッキング接続はこの実装で深刻な問題ですが、それでもやはり当初要求したことがあるようです。 drizzleプロジェクト(https://launchpad.net/drizzle)は、Mysqlと下位互換性のある非同期クライアントで動作しています(ここで言及しています:http://www.oddments.org/?p=20) –

0

唯一の解決策は、standard connectorをラップする非同期サービスを作成することだと思います。あなたはODBC APIを理解する必要があります。

2

私は非常に異なる技術、つまり、Twisted Python(reactor-based IO)とsqlAlchemy(??)で同様の問題を抱えていました。解決策を探しているうちに、sqlAlchemy用に個別のスレッドを作成してから、要求に応答するsAsyncプロジェクトが見つかりました。

ASIOは低レベルのOS機能(aio_read()やReadFileEx()など)とOSレベルのリアクタ(Windowsの場合はProactor)に基づいているため、同様の手段で「非同期性」をエミュレートするよりも、スレッドでの同期コネクタを実行

はオプション

ではありませんそれについて考える:あなたが使用しているlibmysqlclient/mysqlclient.dllは、同期のソケット呼び出しを行います。 OSスケジューラはI/Oが終了するまで別のスレッドに正しく切り替わります。違いは何ですか? (このために2kスレッドを作成するべきではありません。)

編集:mysql_real_connect()は、UNIXソケットパラメータをサポートしています。あなたはおそらくmysqlサーバポートからあなた自身を読んで、そのUNIXソケットにASIOを使って書き込むだけです。プロキシフィケションのように。

1

[スレッドで同期コネクタはオプションではありません実行すると、それについて考える :/あなたが使っているmysqlclient.dll libmysqlclientのは、同期のソケット呼び出しを行います。 OSスケジューラは、I/Oが終了するまで別のスレッドに正しく切り替わります。]

これは私を悩ませています! - 「別のスレッド」は簡単に2番目の同期になる可能性があります。 mysqlへの接続は、別のクライアントと同じようにmysqlで処理する必要がありますか?私のgutfeelは、複数のスレッドを使用して動作するはずです。

+1

スレッドで動作します。しかし、あなたは1つ以上のサーバーに対して100の接続をしたいと言うことができます。私は誰もそれをするだろうとは思わないが、議論のためにそれを受け入れる。私は100スレッド(またはスレッドプール..でも10だけ)をスピンアップする必要がありますか?それはかなり大きなオーバーヘッドです。 –

1

のMySQLコネクタ/ C++ JDBC 4.0のC++実装です

をMySQL Connector/C++を使用しているリファレンス・ユーザーは、 - OpenOffice - MySQL Workbench

は、こちらをご覧ください:http://forums.mysql.com/read.php?167,221298

0

あなたはlibdrizzleを使用して検討していますか?私はdrizzleとは別のプロジェクトだったときから古いバージョンを使いました。私は非同期クエリ機能をテストしましたが、言及する価値のある実際のベンチマークは一度も行っていません。

+0

この質問を作成したときのDrizzleプロジェクトのクイックルック(私の回答を受け入れられた回答に見てください)。当時彼らは非同期クライアントを手に入れていました。私はそれがどうして終わったのか本当に分かりません。 –