2012-01-03 7 views
3

巨大なXMLファイルを解析するのにisaacs' SAXを使用しています。また、recommended by La Gentznode.jsで大きなxml 500Mを解析する

このプロセスでは約650Mのメモリが使用されていますが、これを減らしたり、ノードをさらに使用できるようにするにはどうすればよいですか。

FATAL ERROR: CALL_AND_RETRY_0 Allocation failed - process out of memory 

私のXMLファイルは、それが1ギガバイトまで成長する可能性が300Mよりも大きくなっています。

+0

php.iniファイルのメモリ使用量を増やす必要があるようです。あなたの.iniファイルで 'memory_limit'を探し、扱うことが予想される最大のファイルを許可するように値を変更してください。 – Aaron

+0

XMLファイルをJSONファイルとして保存しようとしていますか?または、Javascriptオブジェクト全体をメモリ内に保持するために、全体を必要としますか? – fent

+0

node.jsを使用しています - メモリ制限を引き上げるパラメータを見つけることができませんでした。 (人間のノード、オプションのロット) – vik

答えて

8

ファイルをパーサーにストリーミングする必要があります。ストリーミングパーサーの全体的なポイントです。

var parser = require('sax').createStream(strict, options); 
fs.createReadStream(file).pipe(parser); 
+0

これは、文書全体をメモリに入れたくない場合に行う方法です。ノードはシングルスレッドなので、実際には大きな解決策ではありません。したがって、この膨大な文書を解析している間は、プロセスはHTTP要求に対する応答など、何もできません。 – danmactough

+0

@danmactough、あなたは何を使用することをお勧めしますか?今のところ、このソリューションは素晴らしく、私のために働きます。私はその文書を読んで、私の労働者に一度だけの仕事をさせるが、これは重要ではない。 – vik

+0

@DeaDEnD、ありがとう。あなたや他の人は、そのパーサーでエンドシグナルを出す方法を知っているので、パーサーは停止し、解析中はparser.onendが呼び出されますか? – vik

関連する問題