gpt4 book ai didi

mysql - 将大型 XML 文件解析到数据库中。使用多线程?

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:14 24 4
gpt4 key购买 nike

我有一个超过 5GB 的 XML 文件,我想将其解析到 MySQL 数据库中。我目前有一个 Ruby 脚本,它使用 Nokogiri SAX 解析器将每本新书插入数据库,但这种方法非常慢,因为它是一本接一本地插入的。我需要找出一种方法来解析具有多个并发线程的大文件。

我想我可以将文件拆分成多个文件,多个脚本可以处理每个子文件。或者让脚本将每个项目发送到后台作业以插入数据库。也许使用 delayed_job、resque 或 sidekiq。

<?xml version="1.0"?>
<ibrary>
<NAME>cool name</NAME>
<book ISBN="11342343">
<title>To Kill A Mockingbird</title>
<description>book desc</description>
<author>Harper Lee</author>
</book>
<book ISBN="989894781234">
<title>Catcher in the Rye</title>
<description>another description</description>
<author>J. D. Salinger</author>
</book>
</library>

有没有人有这方面的经验?使用当前脚本,加载数据库需要一年时间。

最佳答案

这听起来像是生产者/消费者队列的完美工作。您只希望一个线程解析 XML - 但当它解析项目时(大概将它们转换成某种准备插入的对象类型),它可以将转换后的对象放入多个线程正在读取的队列中。每个消费者线程只会阻塞在队列上,直到队列“完成”(即生产者说不会再有数据)或队列中有一个项目——在这种情况下它会处理它(将项目添加到数据库),然后返回等待数据。您需要试验多少个消费者线程可以为您提供最大吞吐量 - 这将取决于各种考虑因素,主要围绕您的数据库的配置方式以及您与它的连接方式。

我对 Ruby 中的线程一无所知,所以我不能给你示例代码,但我确信必须有一个好的标准生产者/消费者队列可用,其余的应该相当简单。

关于mysql - 将大型 XML 文件解析到数据库中。使用多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27876316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com