モバイル アプリケーションにデータを提供するための位置情報ベースのデータ キャッシング (サーバー上) システムが好きです。つまり、一部のユーザーが場所からデータを要求した場合 (これは同じ地域のすべてのユーザーに共通です)、DB から値を取得して表示します。しかし、2 番目のユーザーが同じ場所から次の 5 分以内に同じページを取得した場合、DB に存在する何百万ものレコードにクエリを実行したくありません。ファイル キャッシュにある場合は、それらを取得できます。では、現在 PHP で利用できるものはありますか?
2 に答える
私は PHP でそのようなことを認識していませんが、PHP で独自のキャッシュ エンジンを作成することはそれほど難しくありません。キャッシュディレクトリを作成する必要があり、取得したリクエストに基づいて、そのリクエストに対応するファイルがキャッシュディレクトリにあるかどうかを確認する必要があります。
たとえば、主なパラメータは緯度と経度です。緯度 = 123 および経度 = 234 (いくつかのランダムな値を使用) でリクエストを取得すると、キャッシュ フォルダーが 123_234.data という名前のファイルであるかどうかを確認します。存在する場合は、データベースにクエリを実行する代わりに、ファイルを読み取ってコンテンツを出力として送信します。存在しない場合は、データベースから読み取り、応答を送信する前にその応答をファイル cache/123_234.data に書き込みます。このようにして、データベースに再度クエリを実行することなく、後でファイルを提供することもできます。
課題:
- 時間: キャッシュはいずれかの時点で期限切れになります。そのため、ファイルが存在するかどうかを確認するときに、最終変更のタイムスタンプも確認して、キャッシュの有効期限が切れていないことを確認する必要があります。キャッシュが 1 分、10 分、数時間、数日、または数か月で期限切れになるかどうかは、アプリケーションの要件によって異なります。
- この場合、100m の距離であっても緯度と経度の組み合わせが異なるため、インテリジェントなキャッシュ ファイル名を作成するのは困難です。1 つのオプションは、精度を設定してファイル名を選択することです。たとえば、実際の緯度経度の組み合わせは 28.631541,76.945281 の形式です。28.63154_76.94528.data という名前のキャッシュ ファイルを作成することをお勧めします (精度値を小数点以下 5 桁に減らします)。地球上の単一のポイントまたは地理的領域に対してのみキャッシュするかどうか、および地理的領域の場合はその半径に依存します。
誰かがその質問に反対票を投じた理由はわかりませんが、それは非常に優れた知的な質問だと思います。私の賛成票があります:)
あなたが心配しているのはクエリだけである場合... 1つのアプローチは、場所を一致させるために必要なフィールドとともに、クエリ結果をjsonまたはシリアル化されたphpオブジェクトとして保存するdbテーブルです。
最適な間隔で実行されるcronジョブは、期限切れの結果をクリアします