2011-09-14 8 views
0

私はオーディオ再生ウィジェットを作成するphp/jsプロジェクトを継承しました。要件は、「ピーク時」のかなり重い負荷に耐えることができることです。新しいトラックが最初に発表されたときに、すぐにそれを再生するために急いでいる多くの人がいるかもしれません。重い負荷で死ぬことからウィジェットを止める方法はありますか?

残念ながら、ウィジェットは、このようなストレスの多い状況下ではかなり悪い傾向があります。私たちは、SQLiteデータベースのアクセスキーの保存と検索が、ロックのために致命的なエラーを引き起こしている可能性があると考えていました。セッション変数に格納されるアクセスキーを変更しましたが、今は新しい種類のボトルネックが発生する可能性があることを心配しています。すべてのリクエストはセッションが解放されるのを待たなければならないのですか?

私はPylotをダウンロードしていくつかの基本的な負荷テストを行いました:同じウィジェットにアクセスしようとするエージェントが多すぎるか、まったく使用できなくなる可能性があります。これよりもかなり多くのトラフィックが発生します。何度も何度もリクエストできるようにするためには、どのような戦略を採用することができますか?

答えて

1

PHPファイルベースのセッションは、スクリプトが終了するか、session_write_close()を呼び出すまでセッションファイルをロックします。あなたはすぐにsession_start(); session_write_close()をすることができます。 $ _SESSION配列は引き続き使用できますが、その後の変更はディスクに書き込まれません。これは、PHPがセッションが終了したことを伝えているためです。

+0

関連するファイルの先頭にsession_start()がありますが、まだsession_write_close()が発生していません。だから、私は変数を書く前と後でセッションを開いて閉じ、読み込みの前後にもう一度やり直すべきですか? – thesunneversets

+0

あなたはsession_start()を呼び出した後いつでも読むことができます。 session_closeの後に読んでください。セッションを閉じると$ _SESSIONはゴミ箱になりません。PHPに今すぐディスクに書き出すように指示します(スクリプトが終了すると再び書き出さないようにします)。スクリプトの後半でセッションを変更する場合は、重要な部分を_start/_write_closeペアで囲むことができます。そうしないとスクリプトが終了する前に一度だけ実行します。ドンすれば複数の開閉サイクルを繰り返す必要はありませんそうしなければならない。 –

0

セッションは、MySQLとInnoDBバックエンドのように、MVCCをサポートしているデータベースの具体的なセッションID(プライマリキー)でロックしている間だけロックします。その下にあるファイルシステムを改善することで、これをさらに最適化することができます。

これは競合状態に陥る可能性がありますが、ロック状態にはなりません。楽しむ!

関連する問題