web-dev-qa-db-ja.com

訪問者の頻繁なリロードの無効化

私のウェブサイトにはいくつかのページがあり、3〜4つのサイトに接続し、データベースで結果を確認し、完全なテーブルを収集します。このテーブルには、訪問者が必要とするすべてのデータが含まれています。

バスケットボール、フットボール、バレーボールの最新の100試合の得点表と考えることができます。ユーザーは、勝者、最新のスコア、ゲームの場所、ベットデータなどを確認できます。

データのソースは15分ごとに変化します。したがって、この期間にユーザーがページをリロードすると、多くのCPUが消費され、データベースクエリが実行された後、ほぼ同じテーブルが表示されます。 (小さな違いがあります)

データが1時間後に無効になるため、テーブルデータをWebストレージに保存しません。

私の懸念は、訪問者がページをリロードすると、このプロセスが再び行われることです。どうすればこれを解決できますか?

私の頭に浮かぶ最初のアイデア:

  • ブラウザのlocalStorageにページデータを保存します。ページの最終アクセス日をクッキーに保存します。そして、ページがリロードされると、時差をチェックします。 15分未満の場合、ローカルストレージからデータを取得して同じページを表示します。しかし、このシナリオでは。 5 MBのストレージ制限とブラウザの互換性に制限されます。
  • データベースにページデータを保存し、そこから表示します。この問題は、データが1ページあたり200エントリ近くになることです。 50ページでこのモデルを使用すると、テーブルとデータが多すぎて、1時間でデータが無効になります。
  • Webストレージにページデータを保存します。これは最初はより良いオプションです。しかし、スケーラブルではありません。訪問者数が大きくなると、これは維持できなくなります。

いくつかのアイデアやより良い実践を共有できれば幸いです。ありがとうございました

3
trante

私が最初に考えたのは、数回のリロードが問題を引き起こしている場合、あなたは確かにどこか間違ったことをしているということです。すべてのページの読み込みで他のサイトに接続しないでください。これは、リロードに関係なく、そもそもユーザーエクスペリエンスを低下させます。さらに、他のサイトが常に稼働しており、有効なデータを返すようになります。

最善の方法は、ほぼ確実にデータをキャッシュすることです。データにはいくつかのレベルがあります。外部サイトのデータが15分ごとに変更される場合、別のcronジョブを実行してそのデータを取得し、サーバーに保存します(XMLファイルを取得する場合は、そのファイルを保存します)。これにより、ページがロードされるたびにデータ処理が大幅に高速化されます。

次に、データ処理の結果、つまり出力するテーブルをキャッシュできるかどうかを確認します。出力がすべてのユーザーで同じ場合、これは非常に簡単です。すべてのユーザーが異なる設定をしている場合など、より多くのスペースを占有しますが、少なくともそこにできることがあります。

あなたのアイデアについて:

  1. ローカルストレージには実際にnotの制限がありますが、5MB以上を保存しようとすると、ブラウザはユーザーにプロンプ​​トを表示します。しかし、とにかくあなたがその量に近いことを非常に疑います。
  2. データベースの場合、200エントリの時間50ページは絶対に何もありません。テーブルあたり数百万のエントリを格納するように構築されています。ただし、15分ごとに大量の更新クエリを実行することを意味します。
  3. はい、これは多くのスペースを占有しますが、ストレージは安価です。高速なソリューションが必要な場合は、今すぐこれを実行し、オプションの検討を続けてください。多くの場合、実際にスケーリングが必要になるまで、完全にスケーラブルであることにはほとんど意味がありません。
1
DisgruntledGoat