2012-02-14 123 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