ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルでの大きなファイルの定期的な読み取りと書き込み

php_PHP チュートリアルでの大きなファイルの定期的な読み取りと書き込み

WBOY
WBOYオリジナル
2016-07-20 11:18:021002ブラウズ

最近、PHPが大量の行数(数百万行程度)のファイルをどのように読み込むかを研究しています。 概要は次のとおりです。

最初の問題は、file()関数の効率性です。

file()関数の効率は非常に低いので、1行に1つの対応するデータなど、通常のファイルの場合は、file()関数を使用しないようにしてください

file_get_contents() を使用してから、explode を使用してカットすると、効率が 3 分の 1 速くなります。

例:

ファイル形式は以下の通りです

11111n

22222n

33333n

44444n

55555n

…ん

んんんんんんんんんん

ファイル($file)を使用して読み込むと、時間がかかります。

次のメソッドを使用すると、explode("n",file_get_contents($file)); 効率が大幅に向上します。

2 番目の項目は配列の走査メソッドです。

データが配列に読み込まれました。以下は走査です。

必要なのは、配列に値が存在するかどうか、たとえば 44444 が配列にあるかどうかを判断することです。最初に思い浮かぶのは in_array() です

しかし、実験してみると効率が非常に悪いことが分かりましたので、他の人のコードを参考に配列をひっくり返してすべての値をインデックスにする方法を考えました。 ($arr in if [Index]==1) と書くだけで、確かに効率は高くなります

配列の走査プロセス中に、配列が非常に大きく、配列内のすべてのデータを使用できない場合は、走査に使用される配列を抽出するのが最善です。これにより、効率が大幅に向上します。

第 3 条、配列の保存

計算したデータをファイルに保存する方法としては、phpファイルに直接書き込む方法と、json文字列として保存する方法が考えられます。

最初の方法

ファイルを直接記述して PHP に保存します

必要なときに直接要求します。

2 番目の方法は、変数をシリアル化してから file_put_contents() をファイルに入れることです。これを使用する場合は、シリアル化解除しても問題ありません。

3番目のメソッドは2番目のメソッドと似ており、単にjson文字列として記述されています。

テストの結果、2 番目のタイプが最も効率的で、3 番目のタイプが 2 番目で、2 番目のタイプの効率はほぼ同じであることがわかりました。最初のタイプが最も遅いです。私が予想していたものとは大きな違いがあります。本当にびっくりです

http://www.bkjia.com/PHPjc/371923.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/371923.html

最近取り組んでいるのは、効率の問題を考慮して、PHP がどのようにして大量の行数 (約 100 万行) のファイルを読み込めるかを研究していることです。 file() 関数の効率の問題 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。