在Java中读取XML文件并将其存储在数据库中时的性能问题

问题描述:

嗨我有一个大的xml文件,其结构类似于我在下面给出的结构,每个XML文件中有10万用户。我上传为zip文件,然后我将其解压缩。一旦提取完成,我提供一个导入链接。什么导入它读取具有1lakh(100000)用户的XML文件,然后插入到数据库中。我使用Spring进行休眠并使用石英作业调度程序。我正在上传10个这样的文件,我开始这10个工作,其中包括100万个用户,工作停在中间。我不确定为什么工作停止,我看不到任何停止工作的痕迹。请帮我解决这个问题。有没有更好的方法来读取XML,或者有什么与休眠事务或会话有关的。请帮忙。 我使用java,spring,hibernate,quartz job scheduler。在Java中读取XML文件并将其存储在数据库中时的性能问题

<userlist application="1"> 
<user> 
<username> xmluser1 </username> 
<userid>1</userid> 
<password>xmluser1</password> 
<firstname>first1</firstname> 
<lastname>last1</lastname> 
<phone>2024676868</phone> 
<fax>20246868</fax> 
<address1><![CDATA[dghggggh]]></address1> 
<address2></address2> 
<city>ghgdghg</city> 
<state>fdghg</state> 
<country>UdghgSA</country> 
<postal_code>774dghg07</postal_code> 
<company>dghggg services</company> 
</user> 
</userlist> 
+0

您可能应该包含导致进程停止的错误(如果有)(检查日志),进程运行多长时间?你在访问什么数据库?你是否使用整个文件或每行的交易?... – 2012-02-14 13:49:58

+0

它的每行。我看不到任何错误日志,但事务提交没有发生。我也改变了我的log4j属性文件,所以它只记录错误,性能更好。 – user1209141 2012-02-14 13:56:47

+0

当进程结束时,数据库中是否有数据?如果没有,你可能只是在最后才提交... – 2012-02-14 14:07:21

我建议,你是从10个不同的作业插入数据到同一个表,是任何数据库表锁定发生。您可以尝试降低隔离级别。你正在使用哪个数据库。可能是这个帮助。

+0

非常感谢。我想我应该使用某种数据库表锁定。我正在使用MySql数据库。我将日志记录级别更改为FATAL,并且发现有违反约束的情况。即DB中的重复输入错误。我不知道如何通过休眠来锁定表。 – user1209141 2012-02-15 05:47:24