0

私の問題はここでは非常に単純です。さまざまなAPIから大量のcsvファイルを取得し、それらをデータベース(MySQL)に保存して、ユーザーに表示するphpスクリプトがあります。重要なデータを取得するには、3分ごとにこれらのAPIをクエリする必要があります。最後のデータのみが使用され、履歴データを取得する必要はありません。

私の懸念は、ページを表示する人がいない場合に、これらのAPIにクエリを実行したり、データベースに大量のデータを挿入したりしないようにすることです。

レート制限の問題ではなく、無駄なリクエストやデータベースへの挿入を減らすことを考えているだけです。

私の質問は次のとおりです。

  • 3分ごとにcronジョブを使用してデータを取得し、保存する方がよいですか、または
  • ページが読み込まれ、最後の更新から3分が経過した場合は、phpスクリプトを実行しますか?

最初の状況では、すべてのユーザーが最後の値を持ち、誰もそれらを見ることができない場合でも、データは常に取得されます。
2番目の状況では、3分ごとに1人のユーザーがすべてのデータを取得します(したがって、彼のページの読み込みは他のユーザーよりも少し遅くなります)が、誰もサイトにアクセスしていない場合、無駄なデータは保存されません。

注:
データの取得と挿入には約10秒かかります。

あなたの洞察に感謝します!

4

3 に答える 3

3

両方を組み合わせて実行する必要があります。

サイトにトラフィックがない場合は、データを最新の状態に保つ必要はありません。

サイトにトラフィックがある場合は、データを最新の状態に保つ必要がありますが、3分の時間枠で十分です。

したがって、過去X分以内にアクティビティがあった場合は、3分すべてでデータをフェッチする必要があります。

そうでない場合、最初のユーザーには、データが準備されているというメッセージが表示されますが、これには10秒しかかかりません。その後、Webサイトを自動更新できます。

コンピュータの箱から出してこの処理を実行できる現在のシステムは存在しません。Cronは、仕事を成し遂げるのを助けることができますが、一人ではありません。

システム管理者に連絡して、ニーズを満たすために操作しているプラ​​ットフォームで利用できるものを提案してください。


実際、これはキャッシュのように見えます。CSVデータの有効期間は3分であるため、API応答をキャッシュするだけで済みます。ロジック(ワニスなど)を提供できるキャッシングサーバーを使用する場合は、プリフェッチを比較的簡単に構成できます。独自のコンポーネントを作成するのではなく、構成して再利用するだけでよい既存のコンポーネントを見つけてください。

于 2012-08-06T10:59:43.963 に答える
1

この行で判断すると:

Note:
Retrieving and inserting data take about 10 seconds.

cronjobが最適になります。訪問者が3分ごとにページの読み込みを10秒待つことは喜ばしいことではないと思います。あなたのサイトにアクセスしているのが私だけで、3分ごとに何度も何度もスクリプトを再作成する必要がある場合はどうなりますか...

時間が1秒または2秒の場合は、逆の方法で行うことができます。

于 2012-08-06T10:48:20.620 に答える
1

私があなたのQを正しく理解していれば、この2つの異なるタスクを作成することを検討できます。

a)データを取得して保存する

b)データを処理する

a)3分ごとに実行し、b)要求に応じて実行します

ここで、b)のみの遅延を確認してから、結果セットをキャッシュする価値があるかどうかを検討します。

2つの異なるタスクにすることで、複数のファイルをフェッチする際の遅延の問題の変動からある程度隔離できるという利点があります。また、前回の正常なフェッチからのデータを処理するときに、「このデータは3分以上前のものです」というデータフェッチに失敗した場合のフォールバックを提供することもできます。

于 2012-08-06T10:51:01.317 に答える