9

file_get_contents を使用してディスクから XML ファイルをロードしています。テストの結果file_get_contents()、3.99 秒で 1,000 回を使用して 156K ファイルをロードできることがわかりました。読み込みを行う部分をサブクラス化し、me​​mcache レイヤーに置き換えました。私の開発マシンでは、同じドキュメントを 4.54 秒で 1000 回読み込むことができることがわかりました。

file_get_contents() がキャッシングを行うのはありがたいのですが、よく知られているキャッシング技術よりも実際には速いようです。1 台のサーバーで、 のパフォーマンスはfile_get_contents()最高ですか?

Macports、OS X 10.6.8経由でPHP 5.2.17を使用しています。

MEMCACHE_COMPRESSED編集: このサイズの XML ドキュメントで見つけたのですが、フラグを使用することには小さな利点があります。memcache を介した 1,500 の読み込みは、6.74 秒 (圧縮なし) ではなく、6.44 秒 (圧縮あり) で実行されます。ただし、どちらも より遅くfile_get_contents、5.71 秒で同じ数の読み込みを行います。

4

3 に答える 3

10

file_get_contentsmmapはファイルであるため、ファイル システム コールはわずかしかなく、最終的にファイル システム キャッシュに保存されます。memcache には、memcached へのプロセス外呼び出し (およびクラスター化された実装のサーバー外) が含まれます。

のパフォーマンスはfile_get_contents()、ファイル システムのタイプに大きく依存します。たとえば、NFS マウントされたファイル システム上のファイルは mmap されず、このアクセスは非常に遅くなる可能性があります。また、マルチユーザー サーバーでは、ファイル システム キャッシュが他のプロセスによって急速にフラッシュされる可能性がありますが、memcached キャッシュはほぼ確実にメモリ内にあります。

于 2012-03-04T14:44:49.023 に答える
3

file_get_contents は、ファイルを取得する最も簡単な方法です。基盤となるオペレーティング システム (特に Linux) には、既に効率的なキャッシュ メカニズムがあります。それ以外のことを行うと、オーバーヘッドが発生し、速度が低下します。

これらのファイルをリモートの場所からロードした場合、Memcache は理にかなっています。

編集: file_get_contents が最も簡単な方法であるとは限りません。fopen/fgetはもっと速いかもしれません - 私にはわかりません。ただし、キャッシュ レイヤーの複雑さに比べれば、違いは小さいはずです。

于 2012-03-04T14:43:57.073 に答える
0

XMLファイルをmemcacheに保存することは、私にはほとんど意味がありません。

解析した値を保存して、読み取りと解析の両方を節約したいと思います。

于 2012-03-04T15:29:27.583 に答える