0

PHP でマッシュアップを行う必要がある 2 つの主要なデータ ソースがあります。1 つは SQL データベースで、もう 1 つはフィードです。どちらのソースにも、「名前」または「重量」でソートする必要がある類似のアイテムが含まれています。各ソースに 1,000 を超えるアイテムがあります。フィードは頻繁に変更されるため、単純にフィードをデータベースに保存することはできません。

私が達成したいのは、2 つの正確なページ付けされた出力です。例: 「名前」でソートされた 50 項目を含む結果の 2 ページ目を表示する場合、フィードとデータベースからすべてのデータを読み取るのではなく、両方のソースから必要な項目のみを読み取ります。

私は現在、これにはデータベース データが基本的なデータであり、何らかの方法でフィード データをそれにマージする必要があると想定していますが、1) 間違っている可能性があります。2) どんなに頑張っても、これについて理解できないようです。 .

これを達成する方法について何か提案はありますか?

PS 結果は完全に正確である必要はありません。彼らはそのように見えるだけでよいのです。

4

1 に答える 1

1

たまにフィードの結果をキャッシュすることを検討してください。次に、必要なアイテムのおおよその位置を把握できます。

ユーザーが 2 番目のページを要求する例では、キャッシュを使用して、(キャッシュの時点で) 正確な結果はデー​​タベースからのアイテム #20-50 とフィードからのアイテム #30-50 になると考えます。フィードは頻繁に変更されるため、同じ項目を読み取ってユーザーに表示することはできません。代わりに、余分なアイテムを読み取ることができます。たとえば、両面 10 個です。上記の場合、データベースの項目 #10-60 とフィードの項目 #20-60 になります。余分なアイテムを使用してキャッシュとの一致を見つけると、より正確な結果を提供できます。次に、同じ #20-50 と #30-50 を要求します。

この方法では、「PS」で許可されているように、結果が完全に正確になるわけではありません。ただし、ユーザーがリクエストを行う頻度が高いほど、リクエストごとにキャッシュが少しずつ更新されるため、より正確な回答が得られます。一部のページがユーザーから長期間要求されていないために完全に古くなっている場合に備えて、キャッシュの有効期限の追跡も実装する必要があります。

上記の可能な実装は、「ページ」と「並べ替えタイプ」の組み合わせごとに行を持つ追加のテーブルです。この例では、1 ページあたり 50 アイテム、合計 2000 アイテムの場合、「名前で並べ替える」には 40 行、「重量で並べ替える」には 40 行になります。各行は、特定のページが最後にアクセスされたときに両方のソースから取得されたアイテムと、その情報の最終更新タイムスタンプに関する情報で構成されます。

PS詳細を投稿しないため、より具体的な回答を出すのが難しくなりますが、私が書いたことが役立つことを願っています!

于 2011-12-26T13:20:44.377 に答える