1

ページネーションをサポートするデータソースからの結果をページネーションしたい場合は、次のプロセスに進む必要があります。

  1. ページ サイズの定義 - これは、1 ページに表示する結果の数です。
  2. オフセット = ページ番号 (0 ベース) * ページ サイズを使用して、ユーザーが要求した各ページをフェッチします。
  3. 取得したページの結果を表示します。

これはすべて、実行中のページネーションを台無しにする操作がバックエンド システムに影響を与える可能性があるという事実を考慮しなくても、問題なく機能します。ページの取得の間にデータを挿入したり、データを削除したりする人について話しているのです。

page_size = 10;
get page 0 -> results from 0 to 9;
user inserts a record that due to the query being executed goes to page 0 - the one just shown;
get page 1 -> results from 10 to 19 - the first results on the page is the result on the old page 0.

説明されている動作は、視聴者を混乱させる可能性があります。この問題を回避する実用的な解決策を知っていますか。

4

3 に答える 3

1

これにはいくつかの考え方があります。

  1. データが更新されます
  2. 結果セット全体を保持するある種のキャッシュ方法を実装できます(これは、非常に大きなデータセットを操作する場合のオプションではない可能性があります)
  3. 各ページ操作で比較を行い、合計レコード数が変更された場合にユーザーに通知することができます

于 2008-09-17T15:42:18.937 に答える
0

関心のある更新が主に新しい挿入である場合(たとえば、質問をページングして新しい質問が入ってくると、StackOverflow自体がこの問題に悩まされているようです)、それを処理する1つの方法は、最初のページングクエリを発行するときにタイムスタンプをキャプチャすることです。 、次に、後続のページのリクエストの結果を、そのタイムスタンプより前に存在したアイテムに制限します。

于 2008-09-17T15:47:22.967 に答える
0

基礎となるデータが常に変化していることをユーザーが理解している限り、混乱することはありません。したがって、単純な方法で実行してください。

結果の最初の数ページをキャッシュして、それを後続のビューに使用することもできますが、そうすると結果がデータベースと同期しなくなり、さらに混乱します。

于 2008-09-17T16:49:09.167 に答える