我正在使用快速XML解析一个巨大的xml文件(>100 GB),这个文件来自BufReader。
我想把解析工作发展成多个线程。是否有一个快速XML拆分器可以将BufReader输入分割成独立的XML块,然后我可以使用快速xml分别进行解析?
发布于 2022-02-17 15:28:58
我不知道这种板条箱是否存在,如果有,它是否符合你的需要,但如果你决定自己去做,而且你知道你的文件的结构,我猜你很可能有很多这样的实体:
<root>
<entity>
...
</entity>
<entity>
...
</entity>
<entity>
...
</entity>
...
<root>因此,如果每个entity都足够大/足够复杂,您应该从拆分字符串中获益,以便每个字符串部分对应于一个"<entity> ... </entity>"字符串(片)。您可以在一次迭代中动态地进行这种拆分。您可以使用一个工作线程池来并行地解析每个字符串部分,最后将它们合并到所需的数据结构中,比如Vec<Entity>。
当然,如果您正在处理如此庞大的XML文件,您还应该考虑可以在RAM中放什么。
建议的方法可以提供一些性能提升,而且相对简单。当然,可以进一步优化它,但是如果不知道任务的具体情况,很难找到最优的解决方案。
而且,确保所有这些都是值得的。测量从IO读取文件所需的时间,因为这通常会成为瓶颈。确保使用大文件进行测试,否则系统的IO缓存可能会误导您IO读取速度高于实际速度。
https://stackoverflow.com/questions/71158830
复制相似问题