4

目前,我正在使用 LIBXML::SAXParser::Callbacks 来解析一个包含 140,000 个产品数据的大型 XML 文件。我正在使用一项任务将这些产品的数据导入到我的 rails 应用程序中。

我上一次导入只用了不到 10 个小时就完成了:

rake asi:import_products --trace  26815.23s user 1393.03s system 80% cpu 9:47:34.09 total

当前实现的问题在于 XML 中复杂的依赖结构意味着,我需要跟踪整个产品节点才能知道如何正确解析它。

理想情况下,我想要一种可以自己处理每个产品节点并能够使用 XPATH 的方法,文件大小限制了我们使用需要将整个 XML 文件加载到内存中的方法。我无法控制原始 XML 的格式或大小。我最多可以在该过程中使用 3GB 的内存。

还有比这更好的方法吗?

当前耙任务代码:

XML 文件的片段:

4

1 回答 1

1

您可以先获取整个文件吗?如果是这样,那么我建议将 XML 文件拆分为更小的块(例如,512MB 左右),这样您就可以一次解析同时的块(每个核心一个),因为我相信您拥有现代 CPU。关于无效或格式错误的 xml - 只需使用简单的字符串操作附加或添加缺少的 XML。

您还可以尝试分析您的回调方法。这是一大段代码,我很确定至少应该有一个瓶颈可以为您节省几分钟。

于 2010-05-18T19:25:49.850 回答