2012-02-14 48 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並做到這一點,直到我到達文件的結尾。現在使用該命令創建一個新文件。我用C++ ifstream,ofstream來執行上述任務;

這種方法需要6小時才能完成以下任務。 函數原型是:void重新排列(string tag,string inputfile); 50GB文件中的對象數大於12000000. 任何人都可以爲我提供另一種提高性能的方法嗎?

在此先感謝。

回答

0

這很簡單。獲取64位機器,並對整個輸入和輸出文件進行內存映射。獲取指向輸入文件中所有標記的指針,按標記對指針進行排序,並按排序順序將它們複製到輸出文件。您的磁盤性能將成爲主要瓶頸。

+0

現在它採取你的方法3小時。但我想進一步提高性能,還有其他方法嗎? 謝謝。 – 2012-02-16 11:39:59