9

csvファイルを読み取るための非常に高速な方法を探しています。私のデータ構造は次のようになります。

timestamp ,float     , string    ,ip          ,string
1318190061,1640851625, lore ipsum,84.169.42.48,appname

そして、私はfgetcsvを使用してこのデータを配列に読み込みます。

問題:パフォーマンス。スクリプトは定期的に10,000を超えるエントリを読み取る(および処理する)必要があります。

私の最初の試みは非常に簡単です:

//Performance: 0,141 seconds / 13.5 MB

while(!feof($statisticsfile)) 
    {
    $temp = fgetcsv($statisticsfile);
    $timestamp[] = $temp[0];
    $value[] = $temp[1];
    $text[] = $temp[2];
    $ip[] = $temp[3];
    $app[] = $temp[4];
    }

私の2回目の試み:

//Performance: 0,125 seconds / 10.8 MB

while (($userinfo = fgetcsv($statisticsfile)) !== FALSE) {
   list ($timestamp[], $value[], $text, $ip, $app) = $userinfo;
}
  1. パフォーマンスをさらに向上させる方法はありますか、それとも私の方法は可能な限り高速ですか?
  2. おそらくもっと重要です。どの列を読み取るかを定義する方法はありますか。たとえば、タイムスタンプのみが必要な場合もあります。float列が必要です。私の方法よりも良い方法はありますか(私の2回目の試みを見てください:)

ありがとう :)

4

2 に答える 2

2

一番長い列はどれくらいですか?これを 2 番目のパラメーターとして fgetcsv() に渡すと、最大の改善が見られます。

于 2012-09-13T05:10:37.440 に答える
0

PHP がこのファイルを読み取った時間を確認します。

ファイルが大きい場合は、ファイルを RAM ディスクまたは SSD に移動します

  1. [..]タイムスタンプのみの場合もある

そのようなもの

preg_match_all('#\d{10},\d{10}, (.*?),\d.\d.\d.\d,appname#',$f,$res);

print_r($res);
于 2011-10-10T02:54:14.280 に答える