如何有效地解析用C大BZ2 xml文件 [英] How to efficiently parse large bz2 xml file in C

查看:136
本文介绍了如何有效地解析用C大BZ2 xml文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要做的:


  • 下载OSM(OpenStreetMap的)的定期数据(或使用diff文件更新)

  • 解析这些数据,这是一个bzip2的COM pressed XML和我有关的部分,存储在我的数据库内存+ CPU尽可能高效(运行时不thaaaat大问题)

我有什么:


  • xxx.osm.bz2文件(bzip2的COM pressed XML),玉米pressed 29GB,uncom pressed约400GB

  • 软件在Debian Linux上运行,没有虚拟机或参与任何

具体问题,来阐述我的问题是:

Specific questions, to elaborate what my problem is:


  • 我发现对C的bzip2文件流库++,但不知道如何在C处理这个(sequentielly DECOM pressing数据,并使用在同一时间在我的情况(解析)的话),我应该怎么走这个呢?

  • libxml2和处理XML的所有其他C可用库,我发现解析整个XML,让你在它的工作之后,但我真的不希望在内存中的几个GB的XML只是用于过滤下来顺序 - 我错了有关libxml2和它实际上有这样的功能呢?还是有不同的库可以使用吗?

  • 也许甚至有一个更高层的库要做到这一点它已经为specialiced​​ OSM数据?找不到这样的事情,以及它们提供的工具并不能真正帮助(我不打算与Osmosium或类似第一过滤数据,然后用我的code再过滤它,那将是非常低效我认为)

我希望我已经能够清楚地说明我的问题,我将非常感激,如果有人能至少指向我朝着正确的方向(S)。

I hope I have been able to clearly state my question, and I would be very thankful if someone could at least point me the right direction(s).

非常感谢你。

更新:此张贴右后我发现,实际上的libxml2提供了从2.5.0版本开始XmlTextReader的,这部分解决了我的问题 - 但只是部分,因为我仍然不知道如何结合与顺序BZ2文件读取(和我开到完全不同的解决方案依然当然)。

Update: Right after posting this I found out that libxml2 actually provides xmlTextReader from version 2.5.0 onwards, which partly addresses my question - but only partly, as I still don't know how to combine that with sequential bz2 file reading (and am open to totally different solutions still of course).

更新2:该解决方案必须从一个长期运行的进程的工作,而应该是内存+ CPU效率(在第2点规定),因此,除了别的有数据不应该被复制数十次(在内存或磁盘)。

Update 2: The solution has to work from a permanently running process, and should be (as stated on point 2) memory+cpu efficient, so besides anything else there data should not be copied dozens of times (in memory or on disk).

推荐答案

您不这样做的bzip2 DECOM pression在你的程序中,从标准输入刚才读uncom pressed XML和libxml2的解析(或等同放着清单)。然后,只需打电话给你这样的程序,并享受UNIX管道的beuty:

You don't do bzip2 decompression in your program, just read uncompressed xml from stdin and parse it with libxml2 (or equvalent). Then just call your program like this, and enjoy the beuty of unix pipes:

bzip2 -d < planet.osm.bzip2 | yourtool

这篇关于如何有效地解析用C大BZ2 xml文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆