2011-12-26 10 views
0

私は、PHPでマッシュアップを行うために必要な2つの主なデータソースを持っています。最初のものはSQLデータベースであり、もう1つはフィードです。両方のソースには、「名前」または「重量」でソートする必要のある類似の項目が含まれています。各ソースには1k以上のアイテムがあります。フィードがあまりにも頻繁に変更されるので、単にフィードをdbに格納することはオプションではありません。動的フィードをページングによるデータベース結果に統合

私が達成したいのは、2つのページングされた正確な出力です。たとえば、「名前」でソートされた50個のアイテムを含む結果のページ2を表示すると、フィードとデータベースからすべてのデータを読み上げるのではなく、両方のソースから必要な項目だけを読み込みます。

私は現在、データベースデータを基本データにして何らかの形でフィードデータをマージする必要があると仮定していますが、1)間違っている可能性があります.2)私は試してみるようです。

これを達成するための提案はありますか?

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

答えて

1

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

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

この方法では、 "P.S."を許可するので、結果は完全に正確ではありません。しかし、リクエストが頻繁に行われるほど、リクエストごとにキャッシュが少し更新されるため、より正確な答えが得られます。キャッシュ期限追跡も実装する必要があります。これは、ユーザーによって長時間要求されなかったページがあり、完全に古くなっているページがあるとします。

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

P.S.あなたは詳細を投稿しないので、より具体的な回答が出にくいですが、私が書いたものが助けになることを願っています!

関連する問題