私は現在PHPでコーディングしています。最近私はPHPとSymfonyを使用してプロジェクトに取り組んでいます:
PHP=で終了しましたが、現在はメモリを大量に消費し、実行に約8〜15秒かかります。そのため、次のオプションがあり、いずれかを選択する手助けが必要です。
これらの種類のタスクをより速く処理できる別の言語(Python、Cなど)があると確信しているので、私は2または3(異なる言語を使用)を実行する傾向があります。どちらかわからないだけです。
別の言語を選択する前に、最初にその言語がボトルネックであることを確認してください。それで、あなたは実際に4つのステップの時間を測定しましたか?たとえば、ステップ1のほとんどの待機時間が言語インタプリタで費やされていることを知っていますか(ディスクIOが原因ではありません)。後者の場合、C++(またはアセンブラー)のような言語を選択しても、関連する速度の向上が得られない場合があります。
多くの場合、XML処理はXMLパーサーの速度に依存しているため、次に検討する必要があるかもしれません。 libxml は非常に高速で、Cライブラリですが、PHP拡張機能として使用することもできます。大きな配列を構築するmay言語の変更、ソートによって高速化されますが、PHP(これはおそらくCまたはC++自体)そして、ファイルへのデータの書き込みは、ほとんどがディスクI/Oによって支配されます。これも、別の言語では役に立たないものです。
したがって、まず本当の問題がどこにあるかを確認してください。そうしないと、測定せずに最適化を行うと仮定すると、問題がどれほど間違っているかがわかります。
XMLでの作業に推奨する言語は [〜#〜] xslt [〜#〜] で、この目的のために設計されています。 XMLファイルをマージし、CSVファイルを出力として生成するのに最適です。
XSLTはXSL Transformationsの略で、W3C(1999年以来のWorld Wide Web Consortiumの推奨事項です。XMLもW3C標準であり、XMLとXSLTの両方が関連する標準です。実際、XSLTは実際にはXMLなので、XMLを知っていれば、これは、XMLドキュメントで作業している場合におそらく行うことですが、XSLTプログラムの構造はすでに理解しています。
Firefox、IEおよびGoogle ChromeはすべてXSLTプロセッサを実装しています。さらにMicrosoft、AppleはXSLTプロセッサを実装し、ソースプロセッサをオープンしています Gnomeのツールキット なども存在します。
XSLTプロセッサーの実装は非常に多いため、主要ベンダーの製品は高度に最適化されており、速度でパフォーマンスが向上するXMLファイルで動作する代替実装を見つけることはほとんどありません。
ウィキペディアによると:
ただし、XSLTプロセッサは、式ツリーの静的な書き換え(ループから計算を移動するなど)や中間結果のメモリフットプリントを削減する遅延パイプライン評価など、関数型プログラミング言語やデータベースクエリ言語に見られる最適化手法をますます使用しています。 (プロセッサが以下の兄弟などの式を評価できる場合は、「早期終了」を許可します:: * 1 すべての部分式の完全な評価なしで)。多くのプロセッサーは、汎用のDOM実装よりも(空間と時間の両方で)非常に効率的なツリー表現も使用します。
これらの他の質問も確認したい場合があります: https://softwareengineering.stackexchange.com/questions/25202/what-is-the-reason-for-using-xslt & https://softwareengineering.stackexchange.com/questions/13477/xslt-for-beginners
誰もこれに言及していないことに驚いたが、XMLデータをDOMDocumentに読み取り/解析する代わりに、SAX処理を使用できる。つまり、XMLデータが読み取られて解析されている間、実行する追加した関数があります。たとえば、「root」という名前の要素の開始タグが発生すると、「root_start」などの関数が実行されます。
XMLパーサーライブラリ を使用すると、SAX処理メソッドを使用できます。 少数例 が含まれます。
その後、XMLデータのDOMDocumentとしての保存をスキップして、言及した大きな配列としてデータを保存できます。次に、以前と同じようにマージ/ソートを続けます。これにより、メモリの消費量とタスクにかかる時間が短縮されます。
適切なソート/マージアルゴリズムも使用していることを確認してください。 XMLドキュメントの処理中に、並べ替えやマージを行う必要がある場合があります...