2017-09-26 4 views
-1

私は自分のシステムを使っているときに正しくmysqlデータベースからデータを読み込み、スクリプトに問題はない、動作するPerlスクリプトを持っています。複数のperlスクリプトからオンラインデータベースのデータを取り出す方法

私はid、urlの2つの属性を持つ10000行のデータを含むdbを持っています。

Perlを使用してdbを開き、自分のマシンのidとurlの最初の10個のデータセットを取得し、別のシステムで次の10行のデータを取る必要があります。

このようなやり方は他にもありますか?

+0

私はあなたが別のプログラムが同じデータセットに一緒に仕事をしたいことを理解しています。あれは正しいですか? – simbabque

+0

はい、異なるマシンで動作し、1つのデータベースからデータを取得する同じスクリプト – Sugumar

+0

異なるマシンで同じプログラムを実行し、すべて同じデータベースを使用するようにしても問題はありません。興味深いのは、何かを並行して処理させることです。あなたのデータ処理をクラスタ化したいように思えます。マシンaはライン1から10を行い、マシンBはライン11から20を行います。質問は今、どのようなものを実行するかをどのように知っていますか?静的割り当てがある場合は、プログラムに引数を使用できます。 – simbabque

答えて

0

数字が1,2,3,4または5であることを示すパラメータを使用してスクリプトを作成できます。同じスクリプトで、5つのホストのそれぞれで別の番号で呼び出されました。したがって、1番から10番、51番から60番、101番から110番までのプロセスが1番です。これは、(id、url)のペアが削除または挿入されない限り正しく動作します。追加はOKです。あなたのスクリプトがログファイルを書き込む場合、あなたはいつでもどこまで完了したかを見ることができます。テーブルに 'ホスト'と 'ステータス'の列を追加することもできます。これは、レコードがまだ処理されていないこと、ホストによって処理されていること、または既に完了していることを示します。

既存のテーブルに列を追加できない場合は、最初のテーブルを参照する2番目のテーブルをIDで使用することがあります。

挿入/削除の問題(あなたに当てはまる場合)を解決したい場合は、さらに進んでホストが次の未処理レコードを確認し、ロックして処理し、書き込みますステータスを「完了」に変更し、レコードを解放します。

さらに、リソースを利用できるように、ホストがパーティに参加し、ロック、処理、解放することもできます。

====================

異なる開始:1つのホストコントローラであり、あなたの10レコードのパケットを配布しています。したがって、各ホストの等しいスクリプトは、10のIDを転送するパラメータを受け入れる必要があります。 2番目のスクリプトは、ホストが10個のレコードで完了したときに10個の新しいレコードを作成することを通知します。

ハッピースクリプティング。

TomTomTom

+0

あなたの方法で私は解決策を得たが、私は同時接続数を5から100に増やすと遅く返事を申し訳ありません。今私は100のConnectionが1つのdbに接続し、作業が終了したら、テーブルをロックして結果をdbに更新するときにこうしています。ここで問題は、テーブルをロックするときに、テーブルがロック解除されるときに待機する残りの接続がある場合です。 – Sugumar

+0

テーブル全体をロックすることは、テーブル全体の操作にのみ必要です。あなたが変更しようとしているレコーダーをロックするだけで(そして完了したらロックを解除する)、他のレコードを自由に変更することができます。 – TomTomTom

関連する問題