我想做的事:
- 定期下载 OSM (OpenStreetMap) 数据(或使用差异更新)
- 解析该数据,这是一个 bzip2 压缩的 xml,并将与我相关的部分存储在我的数据库中,尽可能提高内存 + cpu 效率(运行时并不是什么大问题)
我有的:
- xxx.osm.bz2文件(bzip2压缩xml),压缩29GB,未压缩约400GB
- 软件在 debian linux 上运行,没有 vm 或任何涉及的东西
具体问题,详细说明我的问题是什么:
- 我找到了 c++ 的 bzip2 文件流库,但没有找到如何在 c 中处理这个问题(顺序解压缩数据并同时使用(在我的情况下解析)它),我应该怎么做?
- libxml2 和所有其他处理 xml 的 c 可用库我发现解析整个 xml,然后让你处理它,但我真的不想在内存中有几个 GB 的 xml 只是为了按顺序过滤它 - 我是吗libxml2 错了,它实际上有这样的功能?或者我可以使用其他库吗?
- 也许甚至有一个更高级的库来做到这一点,它已经专门用于 OSM 数据?找不到类似的东西,他们提供的工具并没有真正的帮助(我不打算先用 Osmosium 等过滤数据,然后用我的代码再次过滤,我认为这将是非常低效的)
我希望我能够清楚地说明我的问题,如果有人至少可以为我指出正确的方向,我将非常感激。
非常感谢。
更新:发布此消息后,我发现 libxml2 实际上从 2.5.0 版开始提供 xmlTextReader,这部分解决了我的问题 - 但只是部分解决了我的问题,因为我仍然不知道如何将它与顺序 bz2 文件读取结合起来(并且我当然,仍然对完全不同的解决方案持开放态度)。
更新 2:解决方案必须从永久运行的进程中工作,并且应该(如第 2 点所述)内存+cpu 高效,因此除此之外,不应将数据复制数十次(在内存或磁盘上)。