我目前正在研究一个Java项目,我需要准备一个很大的(对我来说)mysql数据库。我必须使用Jsoup进行Web抓取,并将结果也存储到我的数据库中。据我估计,我将插入大约1,500,000至2,000,000条记录。在我的第一个试用版中,我只是使用循环插入这些记录,而我花了一个星期的时间才能插入大约1/3的所需记录,我认为这太慢了。是否有可能使该过程成为多线程,这样我就可以将记录分为3组,例如每组500,000条记录,然后将它们插入一个数据库(特别是一个表)中?

最佳答案

多线程不会在这里为您提供帮助。您只需将竞争瓶颈从您的应用服务器移至数据库。

取而代之的是尝试使用批处理插入,它们通常使这种事情快几个数量级。参见"3.4 Making Batch Updates" in the JDBC tutorial

编辑:正如@Jon所说,您需要将网页的获取与其从插入数据库中分离出来,否则整个过程将以最慢的操作速度进行。您可能有多个线程正在获取网页,这些页面将数据添加到队列数据结构中,然后只有一个线程使用批处理插入将队列中的数据排入数据库。

09-16 17:31