7

複数の実行中のPHPスクリプトがデータを共有するための簡単な方法が必要です。

RAMストレージエンジンを使用してMySQLDBを作成し、それを介してデータを共有する必要があります(複数のスクリプトが同じDBに同時に接続できますか?)

または、1行に1つのデータを含むフラットファイルの方が適していますか?

4

8 に答える 8

15

フラットファイル?いやぁぁぁぁ...

適切な DB エンジン (MySQL、SQLite など) を使用します。次に、最大のパフォーマンスを得るために、memcached を使用してコンテンツをキャッシュします。


このようにして、並行性などを処理する実証済みのサーバー ソフトウェアを使用して、プロセス間でデータを共有することの容易さと信頼性を手に入れることができます。また、データをキャッシュする速度も得られます。

次の点に注意してください。

  1. MySQL にはクエリ キャッシュがあります。同じクエリを繰り返し発行している場合は、キャッシュ レイヤーを追加しなくても多くのパフォーマンスを得ることができます。
  2. とにかくMySQLは本当に速いです。十分な速度ではないことを示すために負荷テストを行いましたか?
于 2009-09-17T18:23:22.527 に答える
6

メンテナの正気を保つために、フラット ファイルを使用しないでください。

データをできるだけ早く共有したいだけで、すべてを RAM に保持できる場合は、memcachedが最適なソリューションです。

データの永続性が必要な場合は、MySQL などの DBMS を使用してください。

于 2009-09-17T18:23:34.633 に答える
2

1-フラットファイルが役立つ場合:フラットファイルはデータベースよりも高速ですが、非常に特殊なアプリケーションです。検索や書き込みを行わずにデータを最初から最後まで読み取ると、より高速になります。データがメモリに収まらず、ジョブを実行するために完全に読み取る必要がある場合は、データベースよりも高速になる可能性があります。また、読み取りよりも書き込みが多い場合、フラットファイルも輝いています。ほとんどのデフォルトのデータベース設定では、インデックスと外部キーを維持するために、読み取りクエリで書き込みが終了するのを待機する必要があります。通常、書き込みクエリを単純な読み取りよりも遅くします。

TD / LRバージョン:Web検索クエリではなく、ジョブベースのシステム(別名、単純なログ解析)にフラットファイルを使用します。

2-フラットファイルの落とし穴:フラットファイルを使用する場合は、カスタムロックメカニズムを使用してファイルが変更されたときにスクリプトを同期する必要があります。バグがある場合、これは速度低下、デッドロックまでの破損につながる可能性があります。

3-RAMベースのデータベース?ほとんどのデータベースには、クエリ結果や検索インデックス用のメモリキャッシュがあり、フラットファイルで打ち負かすのは非常に困難です。それらはメモリにキャッシュされるため、メモリから完全に実行することは、ほとんどの場合、効果がなく危険です。データベース構成を適切に調整することをお勧めします。

ramを使用してパフォーマンスを最適化することを検討している場合は、最初に、ramドライブからphpスクリプト、htmlページ、および小さな画像を実行することを検討します。キャッシュメカニズムが粗雑であり、変化しない静的データに対して体系的にハードドライブにアクセスする可能性が高い場合。

ロードバランサーを使用すると、RAMベースのSANアレイまでのバックプレーン接続でクラスタリングを行うことで、より良い結果を得ることができます。しかし、それはまったく別のトピックです。

5-複数のスクリプトを同じDBに同時に接続できますか?

はい、接続プールと呼ばれます。php(クライアント側)では、接続を開く関数mysql-pconnect(http://php.net/manual/en/function.mysql-pconnect.php)。php.iniで最大オープン接続を設定できると思います。mysqlサーバー側の同様の設定は、/ etc / mysql/my.cnfで同時クライアント接続の最大数を定義します。

CPUの並列処理を利用し、phpスクリプトが互いのクエリが終了するのを待つのを避けるために、これを行う必要があります。重負荷時のパフォーマンスが大幅に向上します。

通常のWebクライアント用のApache構成には1つの接続プール/スレッドプールもあります。httpd.confを参照してください。

テキストの壁でごめんなさい、退屈でした。ルイ。

于 2009-11-03T06:59:25.970 に答える
2

一般に、DB の方が優れていますが、ほとんど静的な少量のデータを共有している場合は、フラット ファイルを使用することでパフォーマンス上の利点 (および単純さ) が得られる可能性があります。

ただし、些細なデータ共有以外の場合は、DB を選択します。

于 2009-09-17T18:24:58.640 に答える
1

それらを複数のサーバーで実行している場合、ファイルシステムベースのアプローチはそれをカットしません (一貫した共有ファイルシステムを持っていない限り、これは可能性が低く、スケーラブルではない可能性があります)。

したがって、Web サーバー間でデータを共有できるようにするには、とにかくサーバーベースのデータベースが必要です。パフォーマンスまたは可用性のいずれかを重視する場合、アプリケーションは複数の Web サーバーをサポートします。

于 2009-09-17T21:33:05.733 に答える
0

システムにPHPキャッシュ(APCなどのコンパイル済みPHPコードをメモリにキャッシュする)がある場合は、データをPHPコードとしてPHPファイルに入れてみてください。データを書き込む必要がある場合は、セキュリティ上の問題がいくつかあります。

于 2009-09-17T18:50:28.503 に答える
0

複数の実行中の PHP スクリプトがデータを共有する簡単な方法が必要です。

APCと memcached は、コンテキストによってはどちらも適切なオプションです。 共有メモリもオプションの場合があります。

RAM ストレージ エンジンを使用して MySQL DB を作成し、それを介してデータを共有する必要があります (複数のスクリプトが同じ DB に同時に接続できますか?)

これも適切なオプションですが、おそらく APC や memcached ほど高速ではありません。

それとも、1 行に 1 つのデータを含むフラット ファイルの方がよいでしょうか?

これが読み取り専用データの場合、その可能性はありますが、上記のどのオプションよりも遅くなる可能性があります。特にデータが大きい場合。ただし、独自の構文解析コードを作成するのではなく、単純に PHP 配列を作成してファイルを include() することを検討してください。

これが複数のライターによって同時にアクセスされる可能性のあるデータストアである場合は、絶対にフラット ファイルを使用しないでください。複数のプロセスからフラット ファイルに書き込むと、ファイルが破損する可能性があります。ファイルをロックすることはできますが、ロック競合の問題や長いロック待機時間のリスクがあります。

同時書き込みを処理することが、mysql や memcached などのアプリケーションが存在する理由です。

于 2009-09-17T23:05:02.833 に答える
0

フラットファイルのロックを処理するメカニズム(およびアクセスを制御する方法)が整っていない限り、MySql DBの方が適していると思います。この場合、DB レイヤー (特定の DBMS に関係なく) は間接レイヤーとして機能するため、心配する必要はありません。

OPはWebサーバーを指定していないため(そしてPHPは実際にはコマンドラインから実行できます)、キャッシングテクノロジーがここで求めているものであるかどうかはわかりません。OP は、Web サイト主導ではないある種の飛行データ変換を行うことを検討している可能性があります。知るか。

于 2009-09-17T18:24:01.777 に答える