2011-11-17 25 views
5

セッション内に大量のデータを格納することの不利益を誰かが説明することができますか?セッション:セッションサイズの制限

セッションにデータを格納することとデータファイルからデータを読み取ることに違いがある場合は、私も興味がありますか?

+0

http://stackoverflow.com/questions/4649907/maximum-size-of-a-php-session http://stackoverflow.com/questions/217420/ideal-php-session-size – Mob

+0

ここにいた。あなたの投稿への署名をやめてください(あなたのタイトルは技術とトピックをリストアップするのではなく、質問_を記述する必要があります) –

答えて

4

セッション内に大量のデータを格納すると、多くの読み書きが行われるため、入出力のパフォーマンスが低下します。

PHPのセッションは、デフォルトでフラットファイルの/ tmpディレクトリに保存されます。したがって、セッションデータはある種のデータファイルに書き込まれます。

PHPでは、デフォルトのセッションハンドラをsession_set_save_handler()関数で上書きすることができます。ここでは、セッションの読み書き/メンテナンスの方法を再定義できます。

session.save_handlerディレクティブで指定したphp.iniファイルでこれを上書きすることもできます。

大きなデータを格納するセッションが多数あるということは、多くのファイルが作成され、ハードドライブが動作するためにそれらを見つけるのに時間がかかることを意味します。それでも普通のものです)。 あなたが持っているものが多いほど、それを見つけるのに時間がかかります。それが大きいほど、それを読むのに時間がかかります。あなたがそれらの多くを持っていて、彼らが大きい場合 - トラブルの2倍、アプローチの変更が必要です。

解決策は何ですか?

通常、パフォーマンスが低下した場合、ユーザーはウェブサイトの負荷を分散します。残念ながらセッションでは動作しません。負荷分散とは、現在の要求を処理するコンピュータを選択することです。つまり、いくつかのウェブサイトで閲覧したページを、異なるコンピュータが提供するということです。つまり、これらのコンピュータがデフォルトのセッション記憶域メカニズム(/ tmpディレクトリ)を使用する場合、セッションは互いの/ tmpディレクトリにアクセスできないため、サーバー間で保存されません。 これを解決するには、NASをマウントしてクラスタ内のすべてのコンピュータにグローバルに表示させることができますが、これは高価でメンテナンスが困難です。

もう1つのオプションは、セッションをデータベースに格納することです。架空のクラスタ内のどのコンピュータからでもデータベースにアクセスできます。通常、セッションを処理するために使用される特殊なデータベースがあります。これは、Webサイトのコンテンツなどを格納するデータベースとは別の意味で使用されます。NoSQLの人気の時代 - 私の意見では、NoSQLはセッションを処理するのに最適です。容易に拡張でき、RDBMSよりもストレージデバイスにデータを書き込む方が高速です。

第3の選択肢は、このすべてを強化し、ハードドライブを永続的なストレージソリューションとし、サーバーのメモリをセッションストレージとして使用することです。 あなたが得るのは素晴らしいパフォーマンスですが、あなたのRAMはすばやく消えてしまうかもしれません。 セッションをRAMに保存するコンピュータのクラスタを作成することもできます。RedisとMemcacheはこの作業には適していますが、グーグルではRedisまたはMemcacheを使用してセッションを保存する方法について説明しています。

要するに、あなたのセッションにあまりデータを保存しないでください。 あなたのニーズと予算に応じて、セッションを保存して作業する方法が3つあります。

1

これは良いリンクです:http://tuxradar.com/practicalphp/10/1/0

セッションデータはあまりにも非常に高価なワークロードです。クッキーまたはセッションIDを保存し、dbfile/rdbmsから必要なものを探すために使用するのが最善の方法です。これにより、セッションデータが1つに制限されているマルチサーバー環境でサイトを実行することもできます。