11

PHP で $_SESSION 変数を使用して一時データ (そのセッションに関連する) をセッションに保存するか、SQL データベースに保存して取得するのがより効率的か疑問に思っています。

お時間をいただきありがとうございます。

4

5 に答える 5

21

セッション変数はストレージ メカニズムによってサポートされていることに注意してください。つまり、リクエストが終了すると、セッション ハンドラーによってセッションが書き込まれます。デフォルトでは、これはファイルに書き込まれます。次の要求で、そのファイル (またはセッション ハンドラーが使用するもの) から引き戻されます。

すべてのリクエストでこのデータを読み書きする場合は、$_SESSION 変数をそのまま使用してください。データベースの接続、クエリ、および更新のオーバーヘッドは、デフォルトの $_SESSION よりも高速ではありません。

負荷分散された複数のサーバーを実行していて、それらの間でセッション データを共有する必要がある場合にのみ、データベースを利用したセッションを使用したいと思うでしょう。この場合、データベース セッションのオーバーヘッドによってサイトの速度が著しく低下していることが判明した場合は、Web サーバーとデータベースの間に memcached を配置することを検討してください。

于 2009-06-08T12:32:19.433 に答える
3

データベースやファイルからの読み込みについてはよくわかりませんが、「DB アクセスが他よりも遅い」というのは本当ではないと思います。私は学校の授業で、I/O アクセスに比べてネットワーク遅延が無視できることを学びました。また、セッションに DB を使用すると、いくつかの利点があります。

ファイルシステムの違いがないため、多くのサーバーを心配する必要はありません。

また、データベースへの/からの何かの保存/読み取りは、ファイルシステムよりも簡単だと思います。

また、共有ホスティングを使用している場合、セッションをデータベースに保存することは、セキュリティにとって大きな利点です。

私が間違っていたら、私を修正してください。私はまだ学ぶべきことがたくさんあります。ありがとう。

于 2010-11-29T14:49:32.157 に答える
2

これは、保存するデータの量と処理するトラフィックの量によって大きく異なります。データが最小限で、サイトが 1 つの Web サーバーを超えて拡張する必要がない場合は、セッション データを Web サーバーのファイル システムに書き込むデフォルトのセッション ハンドラを必ず使用してください。

1 つのボックスを超えてスケ​​ーリングする必要がある場合は、セッション データを memcached などのメモリ データベースまたは通常のデータベースに格納することをお勧めします。PHP でセッション ハンドラーをオーバーライドし、 $_SESSION を使用するときにデータベースに格納する独自の実装を作成できます。

于 2009-06-09T19:32:31.237 に答える
1

どちらがより効率的かは、保存するデータの量と、一時データをどうするかによって異なります。ファイル ストレージのセッション データに 5 メガを保存したことがありますが、これはひどいパフォーマンス キラーでした。しかし、5メガの状態は非常に多く、実際にそこに到達するべきではありません.

いずれにせよ、PHP のセッションをデータベース テーブルに格納するように構成し、両方の長所を活かすことができます。

それでも、データがユーザー セッションの特性を適切に表していない場合は、セッションを使用せず、代わりに何らかのモデル オブジェクトを使用する必要があります。

于 2009-06-08T11:44:35.613 に答える
0

PHPセッションはDBアクセスよりも高速です。しかし、PHPセッションにはいくつかの既知の問題があります。

PHPセッション管理の落とし穴を回避しながら、アクセス時間を非常に速くしたい場合は、memcachedを確認することをお勧めします。

于 2009-06-08T12:07:58.263 に答える