0

ノードに接続し、PHP で接続データを取得するツールを開発しています。

私が使用しているアーキテクチャは、ノードの処理が必要な回数だけコンストラクターでフォークし、ノードに接続して接続データを取得するワーカーです (比較的短い文字列と大きな整数を持つ約 5 フィールド)。

私が直面している問題は、別の児童労働者が仕事を終えたときにデータベース接続が切断されることです。アプローチは、子供がデータベースにアクセスするたびに新しい mysql 接続を確立することです。これは良い習慣ですか?

データベースへのアクセスを許可するために、シングルトンのようなデータベース クラスを実装しましたが、実際には、クラスは意図したように 1 つの接続を使用せず、各チャイルドワーカーに mysql 接続を使用します。(私はその現象「ShareNothing」またはこのようなものについて読みました

これは非常に重要です。デフォルトでは約 100 になるはずの mysql 接続制限について聞いたことがあります。現在、約 60 のノードを維持していますが、今後数か月でノードの数が増える可能性があります。私が現在勤務している会社では、さまざまなコンポーネントの使用に関して非常に制限があるため、ギアマンはオプションではありません。

私はアイデアが不足している点にいます。増加するノードのスケーラビリティを付与するには、データベース アクセスをどのように設計すればよいですか?

編集:アプリケーションは PHP CLI 経由で実行されています。ワーカーは、while ループで囲まれた一連のアクションを含む run 関数を開始します。シーケンスは次のように構築されます (疑似コード INC):

while(allowedToRun())
if(isConnectionStillOpen())
fetchDataFromNodes()
enterIdleRoutine
else
exit

したがって、アプリケーションは無期限に実行することを目的としています

4

1 に答える 1

0

それらをドロップするか、新しいphpページがロードされるたびに新しい接続を開始しているため、接続が切断されます(これはphpプログラミング方法のデフォルトの動作です。より洗練されたものが必要な場合は、Javaまたはその他への移行を検討する必要がありますミドルウェアプログラミング言語)。

ところで、phpマニュアルから

サーバーへのリンクは、明示的に mysql_close() を呼び出して以前に閉じていない限り、スクリプトの実行が終了するとすぐに閉じられます。

http://php.net/manual/en/function.mysql-connect.php


これは開かれた接続の数とは関係ありませんが、同時アクセスを制御するには、トランザクションについて学ぶ必要があります。

http://dev.mysql.com/doc/refman/5.0/en/commit.html

また、テーブルロックで読み取りを行うことも良い考えです

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

于 2013-07-05T10:18:40.183 に答える