比較的大きなxml文書(5Mb)をフェッチして処理する定期的なタスクを実行する必要があります。大きな文書をurl-fetchingするときのソフトプライベートメモリの制限を避ける
私が現在抱えている問題は、アプリケーションインスタンスのメモリ制限に達し、インスタンスが終了したことです。タスクが実行中です。
Iは、いくつかの大まかな測定を行った:
- タスクは、通常、既に5メガバイトのテキストファイルの
- のURLフェッチが65〜にインスタンスのメモリ使用量を増加させるメモリの40〜50 MBの使用インスタンスに予定されています75Mb。
- フェッチされたテキストをUnicodeにデコードすると、メモリ使用量が95-105 Mbに増加します。
- ユニコード文字列をlxmlパーサに渡し、そのルートノードにアクセスすると、インスタンスのメモリ使用量が約120-150 Mbに増加します。
- 文書の実際の処理(XMLノードからデータストアモデルへの変換など)では、インスタンスは終了します。
コード化されたテキストをlxmlパーサーに直接渡してメモリを節約できますが、私にとってはspecifying encoding for lxml parser has some problems on GAEです。
私はおそらく、この仕事のためにMapReduceライブラリを使うことができますが、5MBのファイルにとって本当に価値がありますか?
タスクを複数のタスクに分割することもできます。
また、ファイルをblobstoreに保存してから、blobstoreから行ごとに読み取って処理できますか?副次的なこととして、UrlFetchサービスが大きな文書の処理を簡素化するために「オンデマンドで」応答を読み取ることができると便利です。
このような作業を行う最も簡単な方法は何ですか?
ありがとうございました!
あなたはSAXパーサではなく、DOMのいずれかを使用することができますか? –