2017-11-08 9 views
1

Oracleデータベースから顧客名を昇順または降順に(他の顧客データとともに)表示する必要がある機能を実装する必要があります。サーバーからソートされたデータをチャンクで取得していますか?

  1. DBから最初の100の名前を降順で表示します。
  2. 次の100の名前を表示するボタンがさらに表示されます。
  3. 私は最後のインデックスに基づいて次のレコードを取得する予定です。だからステップ2で101から200の名前を取り出す
  4. しかし、ここでの問題は、ステップ2の直前に他のユーザーによって名前が更新された場合です。 I 2

が最初に検討段階でインデックスによってレコードをフェッチした場合()名がZAに更新された場合()(名前がAXに更新された場合)、または重複している場合名で をスキップすることができますページに表示されるレコード名はZからXまでです。

スキップしたり複製したりせずに正しいレコードを表示できるこのシナリオはどのように処理できますか?

私は考えることができるのは、すべてのレコードIDをメモリ(Webサーバーメモリまたはカーソルメモリのいずれか)にフェッチし、一時的な結果として格納し、実際のデータではなくそこからデータを返します。レコードのうち、ウェブサーバまたはDBメモリのいずれかのメモリにロードされます。

ベストプラクティスとはどのようなもので、他のサイトはこのようなシナリオをどのように処理しますか?

答えて

0

各ユーザーにテーブルデータの固定スナップショットを表示させたい場合は、背後でキャッシュを行う必要があります。ページ2をリクエストしたときに、新しいレコードが1ページ目に上がった場合、同じ情報が2ページ目に再び表示されるようになると、何が起きるのかについて、正当な懸念があります。悪魔の主張者を演奏すると、また、削除され、もはや存在しないレコードをユーザが閲覧している可能性があると主張している。これは、ユーザーエクスペリエンスの面でも同様に悪いことがあります。

私は通常、この問題を処理する方法は、各ページの新しいクエリを行うことです。 Oracleを使用しているため、OFFSETFETCHが使用されている可能性があります。重複/欠落レコードの問題が発生する可能性がありますが、データが非常に急速に変化しない限り、それは軽微なものである可能性があります。

+0

ええ私はあなたが示唆したようにすでにオフセット/ rownumで新鮮なクエリをやっています。 amazonなどのような大きなサイトがこのシナリオをどのように処理するのか不思議です。重複していても紛失しても問題ないか、バックエンドのキャッシングで完璧なアプローチをしていますか? – emilly

+0

@emilly私が見てきたことに基づいて、データセットのスナップショット全体のパターンに従いません。 –

関連する問題