テーブル内の行を表示できる Web サイトがあります (各行は画像です)。100,000 を超える行があります。行のさまざまなサブセットを表示したり、さまざまな並べ替え順序で表示したりできます。行の 1 つを表示しているときに、[次へ] または [前へ] ボタンをクリックして、リストの次/前の行に移動できます。
Web サイトの「次へ」と「前へ」の機能をどのように実装しますか?
より具体的には、最大 100,000 行以上のリストを返す任意のクエリがあり、誰かが表示している現在の行に関する情報を知っている場合、次の行を効率的に決定するにはどうすればよいでしょうか?
これは、Web サイトが若いときに思いついたソリューションの疑似コードです。1000 行しかないときはうまく機能しましたが、100,000 行になった今ではメモリを使いすぎていると思います。
int nextRowId(string query, int currentRowId)
{
array allRowIds = mysql_query(query); // Takes up a lot of memory!
int currentIndex = (index of currentRowId in allRowIds); // Takes time!
return allRowIds[currentIndex+1];
}
この問題について考えている間、Web サイトは現在の行に関する ID 以外の情報 (結果セット内の現在の行の位置など) を保存できることを思い出してください。この情報は、次の行の ID を決定するのに役立ちます。
編集: これについて言及せずに申し訳ありませんが、これは単なる静的な Web サイトではありません。多くの場合、行をリストに追加したり、リスト内で行を並べ替えたりすることができます。(非常にまれですが、行がリストから削除される可能性があります。) 私はそのようなことについて心配する必要があると思いますが、そうでない場合は、あなたが私を納得させることができるかもしれません。