2012-04-19 4 views
1

私たちは、バックエンド独自のデータベースを使用して、当社のウェブサイト上の100以上の動的ページにデータを供給しています。 URLの形式はwww.example.com/blah?id=1、www.example.com/blah?id=2などです。これらのページは、データの取得が非常に遅いため、ロードに最大5秒かかることがあります(私たちが接続しているデータベースのため)。PHPのcronジョブが100を超えるダイナミックURLをキャッシュするページ

私の目標は、キャッシュされるように(キャッシュされるように)すべての動的ページに「ループ」して要求を出す(PHPでの)cronジョブを書くことです。

私の最善のアプローチは、出力が無視される「wget」コマンドが埋め込まれたPHPスクリプトですか?私はcURLにアクセスできます。ページをキャッシュするために100個のURLにヒットするスクリプトを書くことにパフォーマンス上の問題はありますか?私たちはもちろん、夜間にピーク時を過ぎて走ります。

ありがとうございました!

+0

。キャッシュファイルを再生成するすべての同時リクエストは傷つきますか?すべてのサーバー側でこれを行うにはクレンナーを使用してください... – HappyTimeGopher

+1

5秒で100のURLで、あなたのすべてのページをループするのに約8.3分かかるでしょう。私は、これがパフォーマンスの問題を一晩中ページをループさせる原因になるとは思わない。しかし、データの取得が帯域幅の要因を遅くする、またはクエリを最適化する必要があるなどの理由があります。 –

+0

ありがとう、みんな。パフォーマンスの問題は、データを取得しているクエリにあります。私たちが使用しているデータベース(古いものと組み込みのもの)は、複数のテーブルをクエリするときに大幅に速度が低下します。すべてを完全に書き直して「実際の」データベースに切り替える前に、100個のURLを「wget」して24時間のキャッシュにロードします。要求は並行しないでしょう。私は一度に1つずつループで実行します。私はいくつかの "スターター"コードを例として見つけたいと思っていました。これはwgetやカールを利用したものです。 – scottystang

答えて

0

これを行うには、複数のcURLを使用することをおすすめします。そうすれば、あなたのリクエストは互いに並行して実行されます。

あなたはbuilt-in PHP functionsでこれを行うことができますが、私はそれらをラップする多くのクラスのいずれかを使用することをお勧め:それはあなたのサーバーの馬のパワーに依存

https://github.com/jmathai/php-multi-curl

http://curl.haxx.se/libcurl/php/examples/multi.html

+0

クール、私はそれを確認していただきありがとうございます。私は要求をして、コールから戻ってきたものは無視するだけです。カール要求を静かに実行する方法や、wget呼び出しを/ dev/nullにパイプする方法と同様の出力をドロップする方法があると私は考えています。私はカールに慣れていませんが、私はそれを理解します。ありがとう! :) – scottystang

+0

@scottystang、ええ、ちょうど出力と何もしないでください。私はあなたが実際にあなた自身のサーバーにこれを照会していることを知り、DBの端にボトルネックがあります。そのような場合は、100個のURLをすべて同時に要求しないでください。単純な 'foreach'ループがうまく動作します。 – Brad

+0

クール、良い音。 cURLを経由して出力を無視する方法はありますか?私はcURLリクエストを呼び出すたびにURLを動的に構築するループを作成しますが、毎回その出力を無視する必要があります。 – scottystang

関連する問題