3

2 つの一般的な API に接続するシステムがあります。それぞれのデータを集約して、ページ付けできる統一された結果にする必要があります。プロジェクトの範囲は、システムが数十の API をサポートすることになる可能性があることを意味します。

各 API では、リクエストごとに最大 50 件の結果に制限されています。

このデータを集計して信頼できるようにする最善の方法は何ですか。つまり、順序付けられている、重複がないなど

LAMP 環境で CakePHP フレームワークを使用していますが、この質問はすべてのプログラミング言語に関係すると思います。

これまでの私のアプローチは、各プロバイダーの検索 API を照会してから、MySQL テーブルに入力することです。これから、結果は順序付けられ、ページ分割されます。ただし、私の懸念はパフォーマンスです。API 通信、解析、挿入、およびすべてを 1 回の実行で読み取ることです。

私は何かが欠けていますか、誰か他にアイデアはありますか? これは、多くの代替ソリューションに共通の問題であると確信しています。

どんな助けでも大歓迎です。

4

2 に答える 2

1

はい、これはよくある問題です。

SO でhttps://stackoverflow.com/search?q=%5Bphp%5D+background+processingのような質問を検索します

これを試した人なら誰でも、他のサイトを呼び出してデータを取得するのが遅いことに気づきます。最初の 1 つか 2 つは速いように見えますが、他のサイトは壊れ (そしてあなたのアプリは壊れます)、他のサイトは遅くなります (そしてあなたのアプリは遅くなります)。

バックエンドからフロントエンドを切断する必要があります。

選択肢 1 - データベースを取得してロードするだけのバックグラウンド プロセスでデータを事前にクエリします。

選択肢 2 - 長時間実行されるバックグラウンド プロセスを開始し、JavaScript 関数からチェックバックして、まだ完了しているかどうかを確認します。

選択肢 3 - ユーザーの最初の要求によってバックグラウンド プロセスが生成されます。次に、ジョブが完了したら戻ることができるようにリンクを電子メールで送信します。

于 2010-02-13T11:50:31.803 に答える
1

私は 100 以上の rss/atom フィードでまさにそれを行っているサイトを持っています。これが私がしていることです:

  1. フィードのリストと、それらを反復処理する cron ジョブがあります。1 分間に約 5 フィードです。つまり、20 分ごとにすべてのフィードを循環します。
  2. フィードを持ち上げ、URL を一意のフィールドとして使用して各エントリをデータベースに挿入しようとします。URL が存在する場合は挿入しません。エントリの日付は現在のシステム クロックであり、RSS の日付フィールドは信頼できず、場合によっては解析できないため、アプリケーションによって挿入されます。
  3. いくつかのフィードについては、経験だけがあなたに伝えることができます.重複したタイトルも検索します.いくつかのWebサイトは、独自の理由でURLを変更します.
  4. アイテムはすべて同じデータベース テーブルに配置され、クエリの準備が整いました。

最後に 1 つ考えてみましょう: アプリケーションに実稼働中に新しいフィードが追加される可能性が高い場合は、フィードが「新しい」(つまり、データベースに以前のエントリがない) かどうかも確認する必要があります。そうしないと、フィードを追加すると、そのフィードからの記事のブロックがすべて同じ日時で表示されます。(簡単に言えば、私が説明した方法は、フィードへの将来の追加のみを目的としており、過去の記事は利用できません).

お役に立てれば。

于 2010-02-13T12:27:32.180 に答える