私は多くのデバイス(> 1000)と通信するサーバーを持っています。各接続には独自のスレッドがあります。今、私は自分の意見では非常に悪い考えであると思われる> 1000の同時オープン接続を許可するようにmysql設定を設定しなければならないことに気付きました。Qtフレームワークを使用してマルチスレッドアプリケーションでDB接続を減らすためのベストプラクティス
Qtのドキュメントは、すべてのスレッドが独自の接続を必要としていることを言う:http://qt-project.org/doc/qt-4.8/threads-modules.html#threads-and-the-sql-module
だから、私はすべてのスレッドで
QSqlDatabase::addDatabase("QMYSQL", "thread specific string");
を呼び出す必要があります。
ここでベストプラクティスは何ですか?
ありがとうございます。 1:qt接続プールメカニズムを使用すると、1つのスレッド内で複数の接続しかできなくなります。だから、これはここで役に立たないだろう。 2:max_connections> 1000?これは本当にオプションですか、接続の作成/削除はサーバを無意味にするでしょうか?あなたは "それ自身の接続プーリングを持っている"と引き合いに来ていますか?もう少し具体的に指定してください、SQL Relayのような追加のサービスを意味するのでしょうか、あるいはあなたが既にmysqlコア自体の一部を参照している機能ですか? – spikey
私の知る限り、MySQLには接続プールが組み込まれています。つまり、MySQLの別のインスタンスは必要ありません。しかし、接続プーリングはアイドル接続で動作することを覚えておいてください。つまり、あるスレッドが接続を作成し、使用していない場合には、他のスレッドが使用する可能性があります。しかし、最悪の場合、すべてのスレッドが割り当てられた接続を使用し続けている場合は、最大MAX_CONNECTIONS接続を使用できます。 –
これは有望ですね。さて、mysqlサービスに接続がアイドルであることを知らせるために、qtで何をしなければならないのかを知る必要があります。 'QSqlDatabase :: close()'がその仕事をするべきだと思いますか?接続スレッドで受け取った各データパケットのDB接続を開いたり閉じたりすると問題になるのだろうかと思います。ご意見ありがとうございました。 – spikey