2016-05-12 4 views
0

私はホームページ用のデータをフェッチする必要があるため、しばらくの間、人気度でデータをフィルタリングするために複数のクエリを実行したり、ほとんどの人が閲覧したりして、 "union"を使用してすべてを単一のクエリにマージします。したがって、クエリーは自動的に重要度順に並べ替えられます。たとえば、おすすめが最初に、最も人気のあるレコードが次に、次に最も多く閲覧されます。新しいレコードがある場合はデータが時々刻々と変化し、あるレコードは他のレコードよりも人気が高くなり、注文を入れ替える可能性があります。しかし、ページ付けや「もっと読み込み」でさらにデータを取得し、同時にいくつかのレコードを別のレコードとバックグラウンドでスワップした場合、このレコードは次のページに再び表示されます。最初にも示した。APIを使用してソートされていない、フィルタリングされたデータベースデータをページングする最適な方法は何ですか?

私はsince_IDとmax_IDでいくつかのtwitter APIアルゴリズムをチェックしましたが、IDや特定の順序でソートしないため、私のケースでは役に立たないので、複雑さが生じます。

この場合、冗長データをどの程度正確に処理する必要がありますか?誰も似たような経験をしていますか?

ありがとうございます!

答えて

1

「もっと読み込み」すると、既に表示されているIDのセットを送信できます。その結果、SQLクエリの追加条件で除外されます(IDは除外されます)。

ページネーションシステムでは、訪問したすべてのページのセットを渡す必要があり、訪問の順序を制御しないので複雑すぎます。完全な混乱につながります。 ページネーションでは、ランク付けをしてX分間キャッシュすることをお勧めします。だから、すべてのユーザーは同じランキングを数分間経験し、ページは重複したコンテンツを表示することはありません。また、ユーザーエクスペリエンスを向上させるために、ランキングが更新されたときにビジュアルフィードバックを追加することができます。

+0

ご回答ありがとうございます。第1ページまたはすべてのレコードのみをキャッシュすることをお勧めしますか?最初のページだけであれば同じ問題が残るでしょうが、クエリ全体のレコードをキャッシュすると、パフォーマンスが1000以上のレコードのようなクエリに影響し、x分間キャッシュに保存されます。 – Galanx

+0

ページネーションはN回の最初の結果にのみ許可し、exemplesには5〜10ページを許可してください。他の結果は "アーカイブ"です。また、キャッシュには記事のIDのみを格納できます。 編集:X分ごとに1000行を選択すると、SQL Serverがダウンしたことはありません... – JesusTheHun

+0

私は実際にサーバーについて心配していませんが、ユーザーエクスペリエンスについてはもっと心配しています。 iOSでAPIリクエストを介してデータを取得する必要があります。そのため、1000行をフェッチするとパフォーマンスが低下する可能性があります。これは避けようとしています。しかし、私は何らかのバックグラウンドプロセスを引き起こすことによってそれらをキャッシュすることを考えました。 – Galanx

関連する問題