私は40万人弱のユーザーがいるフォーラムを持っています。投稿のタイムゾーンは中部標準時に設定されています。GMTに関連して、+ 3、-8などのタイムゾーンオフセットをデータベースに保存する予定です。私が知りたいのは、APCやxcacheなどのオペコードキャッシュまたはファイルシステムベースのキャッシュを使用してこれらをキャッシュする必要があるかどうかです。私の目標は、各個人のタイムゾーンでデータベースへの継続的な呼び出しを回避することです。
1 に答える
近い将来、この問題に何度も遭遇したことがある$_SESSION
ので、おそらくログイン時に変数に保存します。認証のためにDBを呼び出します。たとえば、認証が成功すると、次のように設定します。
$_SESSION['timezone'] = '3'; // +3 hours from GMT
そうすれば、DBを1回呼び出すことなく、セッション全体で利用でき、必要な場所で使用できます。
上書きする必要がある場合は、次のことができます。
$_SESSION['timezone'] = '-5'; // -5 hours from GMT
または、任意の時点で設定を解除します。
unset($_SESSION['timezone']);
40万人のユーザーがいますが、セットアップ/ネットワーク/同時ユーザーのピーク負荷または平均負荷はわかりません。したがって、分散オブジェクトキャッシュやその他の方法など、以下で説明する方法を検討する必要があるかどうかはわかりません。
バックグラウンド
なぜセッションを使用するのですか?
PHPを$_SESSION
使用すると、データベースから散発的または頻繁にデータを要求する代わりに、多くの情報を保存できます。セッションに大量のデータを保存することもできますが、常識的には、保存するデータをできるだけ少なくする必要があります。それの訳は:
PHPのデフォルトでは、セッションはディスク(/ tmpディレクトリ)に保存されます。これは、プラットフォームの設計方法に基づいて、パフォーマンスの低下が見られる前にある程度スケーリングされます。
オペコードキャッシュ/アクセラレータはどうですか?
eAccelerator、APCなど(PHPオペコードキャッシングエンジンのリストはここにあります)は、PHPが解釈されるため、(特定の機能を備えた1つまたは2つを除いて)そのような変数の呼び出し/戻りを改善しません(DBから)言語。
つまり、PHPで生成されたページが要求されるたびに、サーバーは必要なさまざまなファイルを読み取り、実行時にマシンが理解できるもの(オペコード)にそれらを「コンパイル」する必要があります。
PHPオペコードキャッシュメカニズム/エンジンは、この生成されたコードをキャッシュに保存するため、数百または数百万の後続のリクエストを処理するために1回だけ生成する必要があります。したがって、オペコードキャッシュをインストールすると、ページの生成にかかる時間が短縮されます(場合によっては最大90%)。
PHPオペコードキャッシュを使用することはおそらく良い考えですが、DBへの継続的な呼び出しを減らすことはできません...それは彼らの主な目的ではありません。
より大規模でアクティブ/高負荷のサイトはどうですか?
ユーザーの同意によりトラフィックが多く、負荷がはるかに高い大規模なサイトでは、メモリベースのソリューションを使用して、頻繁に使用されるユーザー指向のデータ(タイムゾーンを含む)の重要な部分を保存することがよくあります。具体的には、「メモリベースのDBテーブル」です。 「」または「分散メモリオブジェクトキャッシング」。これは、負荷を分散するために1つ以上のサーバーに分散できます。
MySQLにはメモリ/ヒープテーブル(ディスクではなくメモリに作成されます)がありますが、データ/情報を返すにはSQLクエリが必要です。言うまでもなく、ディスクに保存されているデータにアクセスするよりもはるかに高速です。
おそらく、PHPドメインで最も人気のあるメモリベースのキャッシュソリューションはmemcachedです。これは、多くの企業/プロジェクトで広く使用されており、次のように説明されています。
高性能の分散メモリオブジェクトキャッシングシステム。一般的な性質ですが、元々はデータベースの負荷を軽減することで動的なWebアプリケーションの高速化に使用することを目的としています... memcachedを使用すると、システムの一部からメモリを取得できます。必要であり、必要な数よりも少ない領域にアクセスできるようにします。
長期的には(そして大幅な成長とともに)、そのようなアプローチが推奨されますが、プラットフォームの負荷とピンチポイント/ボトルネックを理解せずに、$_SESSION
デフォルトでPHPを提案し、そこから作業することをお勧めします。