2012-02-14 8 views
0

大規模なXML文書(サイズ> 50 GB)を指定した順序で並べ替える必要があります。大規模なXML文書を再整理する

例: order [] = {o3、o2、o1};

INPUTFILE:

<objects>        
    <o1> 
     // Some Data 
    </o1> 
    <o2> 
     // Some Data 
    </o2> 
    <o3> 
     // Some Data 
    </o3> 
</objects> 

OUTPUTFILE:

<objects>        
    <o3> 
     // Some Data 
    </o3> 
    <o2> 
     // Some Data 
    </o2> 
    <o1> 
     // Some Data 
    </o1> 
</objects> 

私のアプローチ: 私はオブジェクトタグに遭遇するまで、私はO1、O2、O3タグの一時ファイルを作成開始からファイルを読み込みます私がファイルの終わりに達するまでこれをしてください。オーダーを使用して新しいファイルを作成します。上記のタスクを実行するには、ofstreamのC++ ifstreamを使用しました。

このアプローチでは、次の作業を行うのに6時間かかりました。 関数プロトタイプは次のとおりです。void Rearrange(文字列タグ、文字列入力ファイル); 50GBファイルのオブジェクト数が12000000を超えています。 誰かがパフォーマンスを向上させるための別のアプローチを提案できますか?

ありがとうございます。

答えて

0

これはかなり簡単です。 64ビットマシンを取得し、入出力ファイル全体をメモリマップします。入力ファイル内のすべてのタグへのポインタを取得し、ポインタでタグをソートし、ソート順に出力ファイルにコピーします。ディスクのパフォーマンスが主要なボトルネックになります。

+0

あなたのアプローチでは3時間かかります。しかし、私はさらにパフォーマンスを改善したいと思います、他のアプローチ? ありがとうございます。 –

関連する問題