2011-07-28 8 views
2

私は状態が潜在的に多くのオブジェクトを含んでいるステートフルなWebアプリケーションをPHPで書いています。この時点で、これらのオブジェクトはすべて$ _SESSIONに保持され、要求の最後に直列化されます。セッション全体をシリアライズするには数秒かかり、セッションをシリアライズするにはさらに時間がかかるため、これは少し痛みです。PHPでリクエスト間にオブジェクトを直列化せずに保存する

APCを試したかったのですが、オブジェクトがシリアル化されずに単にmemcopiedされることを期待していたからです。ああ、それは私がapc_store($object)オブジェクトをフィードすると、それは別のプロセスに渡す前にそれをとにかくシリアル化しているようだ。 (私のセッションオブジェクトには多くの(循環)参照があるため、初期値と配列はシリアル化なしでmemcopiedされていますが、それは私にとっては適切な解決策ではありません)

私の質問:毎回のリクエストの後にオブジェクトを直列化せずにPHPでオブジェクトを永続的に保つ方法?私はHipHop通訳がこれを手伝ってくれるという噂を聞いたことがありますが、ネット上で実際の例は見つかりませんでした。誰かが私にPHPで可能かどうか教えてもらえますか?

(私が知っている、私はJavaやTCP接続がなくても、永続インスタンスをサポートする別の言語でこのプロジェクトを書くべきである)

+6

$ _SESSIONのシリアル化に数秒かかる場合は、$ _SESSIONにあまりにも多くのデータが格納されています。適切なデータストア(データベースなど)を使用し、必要な「セッション」の部分だけを格納/取得します。 –

+1

PHP用のグローバルなネイティブインメモリストレージはありません。必要な場合は、実際に別の言語(Javaなど)が必要です。または、提案どおりにセッションをクリーンアップしてください。おそらく、 '__sleep'メソッドで循環参照(PHPに問題がある場合)を削除し、代わりに' __wakeup'でそれらを復元する方法を保存することで、多くの時間を節約できます。 – Wrikken

+0

@Wrikkenどうしてmemcache? – AlienWebguy

答えて

3

あなたが(凍結)を格納する必要があるときはいつでもオブジェクトは、シリアル化する必要があります。これはストレージ(APC、セッションファイル、データベースなど)とは独立しています。これは、スクリプトプロセスが終了して次回の起動時にオブジェクトが再び有効になる必要があるためです。

オブジェクトを「実行状態」にすることはできません。したがって、オブジェクトは常にシリアル化されて保存されます。

PHPのシリアル化が最速ではないことが知られています。代わりの実装があります。たとえば、igbinaryPHP extensionなどを使用できます。透過的なセッション処理の次に、シリアライズ/デシリアライズ機能を提供します。たぶんこれは実際にあなたのシナリオに役立ちます。

いずれにしても、セッションの中にストアするほど、要求の開始時にフリーズまたはウェイクアップする必要があるほど、時間がかかります。

関連:私のステートフルWebアプリケーションでWhat is the php_binary serialization handler?

+1

APCがmod_phpモードで実行されている場合、Apacheプロセスが生成され、すべてのAPCデータを格納する永続化されます。 PHPスクリプトが消滅すると、 'apc_store'で保存されたデータを他のプロセスにコピーし、次のリクエストで利用できるようにします。厳密に言えば、ここではシリアライズする必要はありません。PHPは(理論的に)オブジェクトのメモリをmem-copyする必要があります。何らかの理由で彼らはとにかくそれをすることに決めました。 –

+0

@Pelle ten Cate:あなたの「真実ではない」議論は、シリアライゼーションのもう一つの難しい例ですか?なぜシリアル化がAPCで使用されるのか想像できますか? – hakre

0

私も、のように巧妙な構成XMLとして働くのXMLストレージに私のオブジェクトのほとんどをオフロード。したがって、私はあまりにも多くのオブジェクトをシリアル化する必要はありませんが、私のxmlファイルのサブセット(状態)のみ。これは依然としてサーバー側のアプローチですが、シリアライゼーションをクライアントにオフロードできますか?しかし、おそらくあなたはあまりにも多くのオブジェクトをシリアル化?また、実行時にオブジェクトをファイルに保存しないのはなぜですか?

関連する問題