【问题标题】:On Linux, What is the most efficient way to parse XML into MYSQL?在 Linux 上,将 XML 解析为 MYSQL 的最有效方法是什么?
【发布时间】:2011-12-04 23:57:38
【问题描述】:

我想将 XML 文件解析为 MYSQL DB。

在 LINUX 系统 (Ubuntu) 上执行此操作最有效、最快且资源密集度最低的方法是什么?

我有大约 1GB 的 XML 文件需要每 15 分钟解析一次。每个 XML 大约 60KB。

我正在考虑使用 Shell 或 Perl,或者自己构建解析器,或者获得某种 XML 工具。

我愿意接受任何建议。

【问题讨论】:

  • 您没有提及您的 xml 数据的性质,也没有提及您的数据库架构。除非您提供更多信息,否则无法为您提供帮助。

标签: xml linux perl shell xml-parsing


【解决方案1】:

嗯,到目前为止我见过的最快的 XML(非验证)解析器是 VTD-XML。它可以在性能至关重要的任何地方使用。给出一些数字,在 Core2 2.5 Ghz 上,VTD-XML 的性能比 DOM 解析器高出 5 到 12 倍,每个内核提供 150 到 250 MB/秒的持续吞吐量。

按照这个速度,1 GB 的 XML 可以在 10 秒内被解析。如果解析成功,您可以随机遍历内存中的数据结构,或使用 XPath 获取数据。

鉴于您的要求(1 GB XML 输入),您必须考虑到 VTD-XML 将占用 1.3~1.5 GB 的系统 RAM,因为它必须构建一个内存数据结构来访问已解析的数据,另外XML 文本本身。

VTD-XML 库可用于 C#、Java、C++、C,需要一些时间来适应,因为它有一些学习曲线,但从长远来看,它可能会开始有所回报。

如果可用内存不够,流解析器 (SAX) 应该是更适合这项工作的工具。

【讨论】:

    【解决方案2】:

    将 xml 文件插入 mysql 表,然后使用 MySQL 的 XML 函数提取值会更好吗?您可以参考以下链接:

    http://rpbouman.blogspot.com/2006/03/importing-xml-data-into-mysql-using.html

    【讨论】:

      【解决方案3】:

      将大量数据导入 MySQL 的最快方法是使用 LOAD DATA INFILE 以 PK 顺序将文件中的数据加载到无键表中。考虑到您可能会受到数据库性能的限制,可能值得付出代价将 XML 转换为 CSV/LOAD DATA INFILE 的任何文件,然后一次性将其吞入数据库。

      参照。 http://mysqldump.azundris.com/archives/94-LOAD-DATA-INFILE-and-mysqldump.html

      【讨论】:

        猜你喜欢
        • 2010-10-11
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多