ファイル内の予測できない位置にある小さなセクションに書き込む必要があるいくつかの大きなファイル (約 500MB から 2 GB) を処理するために PHP を使用しています。fwrite()
またはfread()
を呼び出す必要がないように、ファイルを仮想メモリにマップする方法はありますか? 主な注意点は、小さなチャンクを読み取ることですが、すべて 1 つのファイル内で、合計で大量のデータにアクセスすることになります。
質問する
1507 次
1 に答える
2
KingCrunch は頭にそれを釘付けにします..fwrite
そしてfread
本当にfseek
行く方法です..
それらを使用したくないと感じる唯一の理由は、PHP で使用するのが少し難しいためでしょうか?
このような場合は、これらのメソッドを内部的に呼び出す単純なラッパー クラスを作成しないでください。
コメントに基づいて編集
仮想メモリを使用して、ファイルシステムにマップされたメモリである Windows 用語を理解しました。パフォーマンスが心配で、代わりにファイル全体をメモリに配置しても問題ない場合は、今考えられる 2 つのルートがあります。
- tmpfs マウントを作成し、そこにファイルを配置します。
- ストリームを使用し、
php://memory
ファイル全体をそこに配置しstream_copy_to_stream
ます。
file_get_contents を実行することもできます。これにより、メモリ内のストリーム全体が得られますが、tmpfs と php://memory の両方を使用すると、パフォーマンスとメモリ効率が向上することが確実に想像できます。個人的には tmpfs マウントを使用します。
于 2012-10-15T20:21:12.050 に答える