重新排列大型XML文档
Re arranging large XML Document
我需要按照给定的标记顺序重新排列一个大型XML文档(大小>50GB)。
例如:order[]={o3,o2,o1};
输入文件:
<objects>
<o1>
// Some Data
</o1>
<o2>
// Some Data
</o2>
<o3>
// Some Data
</o3>
</objects>
输出文件:
<objects>
<o3>
// Some Data
</o3>
<o2>
// Some Data
</o2>
<o1>
// Some Data
</o1>
</objects>
我的方法:我从一开始就读取文件,直到遇到对象标签,然后创建标签o1、o2、o3的临时文件,并这样做,直到到达文件末尾。现在使用顺序创建一个新文件。我使用C++ifstream,ofstream来执行上述任务;
这种方法花了6小时完成以下任务。函数原型为:void Rearrange(字符串标记,字符串输入文件);50GB文件中的对象计数大于12000000。有人能给我建议另一种提高表现的方法吗?
提前谢谢。
这相当容易。获取一台64位机器,内存映射整个输入和输出文件。获取指向输入文件中所有标记的指针,按标记对指针进行排序,然后按排序顺序将它们复制到输出文件中。您的磁盘性能将成为主要的瓶颈。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++中高效的大型稀疏块压缩线性方程
- Cppcheck生成xml转储文件
- 如何在pugixml中获取节点的内部XML
- 如何使用tinyxml2从XML加载父实体和子实体
- boost xml parsingl将xml的路径作为变量发送
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 使用 Tinyxml 在 xml 中添加一个子子项
- 增强基于 XML class_id的反序列化
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 在 c++ 中使用 vtd-xml 时,如何摆脱 EOFException?
- LMDB:在有限的内存系统中打开大型数据库
- 防止在C++中选择错误文件时提升 xml 解析器崩溃
- 如何在大型c++项目的可视化代码中设置调试
- c++ 读取 xml 文件的内容
- 删除 XML 文件中的子节点C++
- 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- 重新排列大型XML文档
- 如何在大型xml文件中获得正确的数据
- 使用PUGIXML反复保存大型XML文件需要花费大量时间