在Linux上,将XML解析为MYSQL的最有效方法是什么?
我想将 XML 文件解析到 MYSQL 数据库中。
在 LINUX 系统 (Ubuntu) 上执行此操作最有效、最快且占用资源最少的方法是什么。
我有大约 1GB 的 XML 文件,我需要每 15 分钟解析一次。每个 XML 大约为 60KB。
我正在考虑使用 Shell 或 Perl,然后自己构建解析器或获取某种 XML 工具。
我愿意接受任何建议。
I would like to parse XML files into a MYSQL DB.
What is the most efficient and fastest way to do this on a LINUX system (Ubuntu) and the least resource intensive.
I have about 1GB worth of XML files that I need to parse every 15mins. Each XML is about 60KB.
I was thinking about using Shell or Perl and either build the parser myself or get some sort of XML tool.
I am open to any suggestions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
嗯,到目前为止我见过的最快的 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) 应该是更适合这项工作的工具。
Well, the fastest XML ( non validating ) parser I have seen so far is VTD-XML. It can be used everywhere performance is paramount. To give some numbers, on a Core2 2.5 Ghz, VTD-XML outperforms DOM parsers by 5x~12x, delivering 150~250 MB/sec per core sustained throughput.
At that rate, 1 GB of XML can be parsed in 10 seconds. If the parse is successful you can random walk the in-memory data-structure, or use XPath to get data.
Given your requirements ( 1 GB XML input ) you have to take into account that VTD-XML will take 1.3~1.5 GB of your system RAM, because it has to build an in-memory data structure to access parsed data, plus the XML text itself.
VTD-XML library is available for C#, Java, C++, C, it takes some time to get used to, since it has some learning curve, but in the long term it may start paying back.
If available memory ain't enough, a stream parser ( SAX ) should be a more appropriate tool for the job.
将 xml 文件插入到 mysql 表中,然后使用 MySQL 的 XML 函数提取值会是更好的选择吗?您可以参考以下链接:
http:// /rpbouman.blogspot.com/2006/03/importing-xml-data-into-mysql-using.html
Would it be a better option to insert the xml files into the mysql table and then extract the values using the XML functions of MySQL? You may refer to the link below:
http://rpbouman.blogspot.com/2006/03/importing-xml-data-into-mysql-using.html
将大量数据导入 MySQL 的最快方法是使用 LOAD DATA INFILE 按 PK 顺序将文件中的数据加载到无键表中。考虑到您很可能会受到数据库性能的限制,为了 LOAD DATA INFILE 将 XML 转换为 CSV/任何文件,然后一次性将其放入数据库中,这可能是值得的。
比照。 http://mysqldump.azundris.com/archives/94 -LOAD-DATA-INFILE-and-mysqldump.html
The fastest way to get lots of data into MySQL is using LOAD DATA INFILE to load data from a file into a key-less table in PK order. Considering that you might very well be limited by DB performance on this, it may be worthwhile to pay the price of converting the XML to a CSV/whatever file for LOAD DATA INFILE and then slurping it into the DB in one go.
Cf. http://mysqldump.azundris.com/archives/94-LOAD-DATA-INFILE-and-mysqldump.html