カーソルベースのページネーションを使用したリアルタイムデータをページングします
ページネーションは、ページと呼ばれるより小さな部分に大きなレコードセットを破壊するための手法です。開発者としては、ページネーションの実装に精通している必要がありますが、リアルタイムのデータにページネーションを実装することは、経験豊富な開発者であっても注意が必要です。このチュートリアルでは、リアルタイムのデータページネーションとカーソルベースのページネーションのための実際のユースケースとソリューションについて説明します。
キーテイクアウト- ページネーションは、ページと呼ばれる大規模なレコードセットをより小さな部分に分割するために使用される方法です。リアルタイムデータのページネーションの実装は、頻繁に更新されるため、データを追加または削除する際の不正確な結果の可能性があるため、困難な場合があります。
TwitterやFacebookなどのさまざまなソーシャルネットワーキングサイトが、リアルタイムデータページネーションの実装に成功しています。彼らは、ページネーションの記録数ではなく、一意の識別子(カーソル)に依存するカーソルベースのページネーションを使用します。
- カーソルベースのページネーションには、TwitterのMAX_IDパラメーターまたはFacebook後のパラメーターと同様に、一意のシーケンシャル値を持つ少なくとも1つの列が必要です。また、限られた数の結果をフィルタリングするためのカウントパラメーター、およびデータをナビゲートするための次のURLと以前のURLも必要です。 カーソルベースのページネーションは、一般に、特にリアルタイムデータまたは大規模なデータセットの場合、オフセットベースのページネーションよりも効率的で信頼性が高くなります。サーバーの負荷を削減し、ページネーションプロセスをより速く、より効率的にします。
- カーソルベースのページネーションの実装には、カーソルとして使用する一意の識別子を決定する、このカーソルに基づいてレコードを取得するためにデータベースクエリを変更すること、アプリケーションのUIを更新してページングされたデータを処理し、ユーザーがユーザーにできるようにするなど、いくつかのステップが含まれます。ページをナビゲートします。
- リアルタイムのデータページネーションの問題の特定
- Wikipediaは、リアルタイムデータを収集直後に提供される情報として定義しています。提供された情報の適時性に遅延はありません。 このようなアプリケーションでは、頻繁に更新されるため、正確な塗装データを提供することは困難です。リアルタイムデータを管理する際の標準的なページネーションの問題を見てみましょう。
これらのポイントを考慮すると、リアルタイムデータを処理するためのデフォルトページネーションテクニックに使用することは困難です。実用的なシナリオを使用して問題を特定してみましょう。
最初に20のレコードがあり、10を使用してレコードをページに分割するために制限として使用していると仮定します。次の画像は、レコードがどのようにページに分割されているかを示しています。
最初のページにあるときに、結果セットが5つの新しいレコードによって更新されると仮定します。次の画像は、現在のシナリオを示しています
次に、2番目のページに移動します。最初の画像に基づいて、1〜10のレコードを取得する必要があります。ただし、数字15〜6のレコードが取得されます。レコード番号15-11が最初のページと2番目のページの両方に表示されることを明確に確認できます。
私たち全員が知っているように、ホイールを再発明することは、開発者がすべきことではありません。私たちは、独自の構築を考える前に、これらの問題を解決したサイトの既存のページネーション技術を調べる必要があります。 TwitterやFacebookなどの多くのソーシャルネットワーキングサイトは、ユーザープロファイルにリアルタイムデータを提供しています。このセクションでは、最も人気のあるサイトのいくつかを使用して、リアルタイムデータページネーションの実際のユースケースを検討します。
Twitter APIカーソルベースのページネーション
Twitterユーザープロファイルには新しいツイートが頻繁に入力されているため、Twitterタイムラインデータ検索メカニズムは、リアルタイムのデータフィードでページネーション技術を特定するための適切なスタートになるはずです。 Twitter APIメソッドを使用してそれがどのように機能するかを見てみましょう。
以下には、Twitter API検索ツイート方法へのサンプルリクエストが含まれています。上記のURLでは、「PHP」という単語を含む最新のツイートを要求し、カウントパラメーターを使用して結果を10のブロックに分割します。これは、記録数で返信するオフセットページネーションの典型的な動作です。しかし、ここでは、bund_idとmax_idと呼ばれる2つの追加のパラメーターを見ることができます。これにより、カーソルベースのページネーションが可能になります。以前の例を使用してカーソルベースのページネーションがどのように機能するかを見てみましょう。
20ページに20のレコードが分かれており、最初のページにいると仮定します。 5つの新しいレコードがリストの上部に追加されます。次の画像では、現在のシナリオをプレビューします。
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
ご覧のとおり、Search_Metadataセクションでは、結果に関する詳細を提供します。 Paginateのレコードが増える場合に備えて、next_results URLが生成されます。主に、ページネーションにMAX_IDパラメーターを使用しています。各応答を使用すると、MAX_IDパラメーターを取得し、それを使用して次の結果セットを生成できます。 MAX_IDパラメーターを使用して、指定されたIDよりも古い結果を受信します。 この例では、レコード20-11を表示しながら、MAX_IDパラメーターをレコード11として取得する必要があります。次に、MAX_IDを渡して次の結果セットを生成します。したがって、次の画像に示すように正確な結果が得られます。
ご覧のとおり、オフセットベースのページネーションで10ではなく上部で15のレコードを排除することにより、2ページ目の正確な結果が得られます。カーソルベースのページネーションでは、ページが急速に変化するため、ページの概念を考慮することはできません。そのため、結果は以前または次と見なされます。一般的に、MAX_IDは正確な結果を生成するのに十分効果的ですが、前後にパジをパジングしながらanse_idも不可欠であるシナリオがある場合があります。 Twitterの開発者セクションでMAX_IDとANSE_IDの両方を使用するより高度な例を見ることができます。
Facebook APIカーソルベースのページネーション
FacebookのAPI実装は、両方のAPIが同じ理論を使用しているにもかかわらず、Twitterと比較してわずかに異なります。 Facebook APIリクエストのサンプルの応答を見てみましょう。
ご覧のとおり、Facebookは、以前と後に呼び出される2つの文字列ベースのカーソルを使用します。 Facebookでは、前のカーソルがページの開始を指し、後のカーソルがページの最後を指します。
リアルタイムデータを使用したほとんどのAPIは、このメカニズムを使用して結果を正確にページングします。開発者として、既存のAPIを使用し、必要に応じて独自のAPIを使用するために、カーソルベースのページネーションの背後にある理論を知る必要があります。
リアルタイムデータのページネーションの構築の基本"search_metadata": { "max_id": 250126199840518145, "since_id": 24012619984051000, "refresh_url": "?since_id=250126199840518145&q=php&result_type=recent&include_entities=1", "next_results": "?max_id=249279667666817023&q=php&count=10&include_entities=1&result_type=recent", "count": 10, "completed_in": 0.035, "since_id_str": "24012619984051000", "query": "php", "max_id_str": "250126199840518145" }
リアルタイムデータページネーションの実装は、このチュートリアルの範囲を超えた複雑なタスクであるため、カーソルベースのページネーションを理解するための単純なページネーションメカニズムを作成するプロセスを調べます。
以前に説明した例を使用して、カーソルベースのページネーションの基本的なコンポーネントを特定しましょう。
カーソル - カーソルベースのページネーションを実装するには、一意のシーケンシャル値を持つ少なくとも1つの列が必要です。これは、TwitterのMAX_IDパラメーターまたはFacebook後のパラメーターに似ています。
カウント - カーソルの前後に限られた数の結果をフィルタリングするためのオフセットベースのページネーションと同様に、カウントパラメーターが必要です。
次のURL - これは、APIを介してページネーションを提供している場合に必要です。ユーザーは、次のページが利用可能かどうか、次のデータセットを取得する方法を知る必要があります。
これらは、カーソルベースのページネーションの基本的なニーズです。開発者は、多くの場合、オフセットベースのページネーションを使用して、カーソルベースのページネーションで作業する機会を得ることはめったにないため、適切なシナリオでそれらを使用するための各手法の違いと利点を特定することが重要です。
- 一般的に、オフセットページネーションを使用すると、カーソルベースのページネーションが主にフォワードナビゲーションに使用されます。
-
- 最初に、PDOを使用してデータベース接続を作成します。次に、結果をページングするためにHandlePaginationData関数を実行します。 次に、MAX_IDまたはMIN_IDパラメーターがURLで使用できるかどうかを確認します。 MAX_IDは、Facebookの後のパラメーターに似ており、前方にナビゲートするために使用されます。 min_idは、facebookの前のパラメーターに似ており、後方にナビゲートするために使用されます。また、ナビゲーションの方向、max_idまたはmin_idを使用した句とソート順序を設定します。
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
- 最後に、ページネーションリンクを実装するためのページネーター関数を見ることができます。
-
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー今では、リアルタイムのデータページネーションの仕組みを理解するための単純なデータページネーションサンプルがあります。このコードを使用して、結果を介してページングします。ページング中に、テーブルの端にいくつかのレコードを追加して、リアルタイムにします。次に、前後にページのデータの複製を確認します。違いを理解するためにオフセットベースのページネーションで同じことをしてください。
結論このチュートリアルでは、カーソルベースのページネーションを使用したリアルタイムデータページネーションの背後にある理論を学びました。以下のコメントであなたの考えや経験を教えてください!
カーソルベースのページネーションに関するよくある質問(FAQ)
オフセットベースのページネーションとカーソルベースのページネーションの主な違いは何ですか?
オフセットベースのページネーションでは、最初から一定数のレコードをスキップしてから、セット数のレコードを取得します。ただし、この方法では、ページネーション中にデータが追加または削除された場合、レコードを複製するなどの問題につながる可能性があります。一方、カーソルベースのページネーションは、最後のフェッチされたレコードの一意の識別子(カーソル)を使用して、次のレコードセットを取得します。この方法はより効率的であり、オフセットベースのページネーションに関連する問題を回避するため、リアルタイムデータに最適です。 - ベースのページネーションは、最後のフェッチレコードの一意の識別子(カーソル)を使用して次のレコードセットを取得するため、リアルタイムデータに特に効果的です。これは、ページネーションプロセス中に新しいデータが追加されているか、既存のデータが削除されたとしても、カーソルが正しい次のレコードを指し、レコードが見逃さないか重複していないことを保証することを意味します。あらゆるタイプのデータとともに使用しますか?ただし、効率が重要なリアルタイムデータまたは大規模なデータセットでは特に効果的です。カーソルは、次のレコードのセットを取得するために使用できるタイムスタンプや一意のIDなどの一意の識別子にすることができます。カーソルベースのページネーションは、一度に処理する必要があるデータの量を減らすことでパフォーマンスを向上させます。すべてのレコードを取得してから特定の番号をスキップする代わりに、カーソルベースのページネーションは、カーソルに基づいて次のレコードセットを取得するだけです。これにより、サーバーの負荷が削減され、ページネーションプロセスがより速く効率的になります。
アプリケーションにカーソルベースのページネーションを実装するにはどうすればよいですか?
アプリケーションにカーソルベースのページネーションの実装には、いくつかのステップが含まれます。まず、カーソルとして使用する一意の識別子を決定する必要があります。これは、タイムスタンプ、一意のID、またはその他の一意の値です。次に、データベースクエリを変更して、このカーソルに基づいてレコードを取得する必要があります。最後に、アプリケーションのUIを更新して、ページ化されたデータを処理し、ユーザーがページをナビゲートできるようにする必要があります。ページネーションは、オフセットベースのページネーションよりも効率的で信頼性が高く、いくつかの潜在的な欠点があります。たとえば、特にデータがカーソルとして使用する明確な一意の識別子がない場合、実装する方が複雑になる可能性があります。さらに、特定のページ番号にジャンプする必要がある場合など、すべてのユースケースに適していない場合があります。 - ベースのページネーションは、GraphQLで使用できます。実際、GraphQLには、リレー仕様を介したカーソルベースのページネーションのサポートが組み込まれています。これにより、GraphQLアプリケーションに効率的で信頼性の高いページネーションを簡単に実装できます。カーソルとしてのタイムスタンプや一意のIDなどの識別子。次に、このカーソルに基づいてSQLクエリを変更してレコードを取得し、「WHERE」と「LIMIT」条項を使用してレコードの範囲を指定して取得します。 api?
Slackは、APIでカーソルベースのページネーションを使用して、大量のデータを効率的に取得します。彼らはカーソルとして一意の識別子を使用し、API応答でこのカーソルを提供して、クライアントが次のレコードセットを取得できるようにします。これにより、高性能と信頼性を備えた大規模なデータセットを処理することができます。 Cursorとして識別子およびAPI応答の「リンク」オブジェクトにこのカーソルを含めます。これにより、クライアントは、提供されたリンクに従って次のレコードセットを簡単に取得できます。この仕様は、JSON APIでカーソルベースのページネーションを実装するための標準的で一貫した方法を提供します。
以上がカーソルベースのページネーションを使用したリアルタイムデータをページングしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。
