2014-07-08 59 views
1

在我们的应用程序devoloped在java-j2ee中,我们需要从客户端上传的文件中导入记录。文件内容如下:上传服务器上有数十亿条记录的文件,并在数据库中插入记录

id,email,name,last-name,text 
1,[email protected],John,Lives in LA 

......亿万文件中的这样的记录。

当上传过程正在进行时,客户端必须定期更新过程进度。

我们可以正确地上传文件,但是插入其中的所有记录也完成了。但现在我们希望它发生的时间最短。

建议的方法是,

    • 使用多线程叉加入
    • 多个线程
  • JMS

请建议。

回答

3

如果你想真正最短的时间内,在以块的文件复制到服务器与数据库(也许使用Java SCP实现,如果它是可用的),然后做你的数据库的版本的LOAD DATA INFILE(这是MySQL的味道)。

更明智的做法是做批量插入。

建议的方法是,使用多线程,JMS

可能不会帮助。 JMS并没有解决这个问题,并且当IO限制时(并非管道的大小或磁盘的速度真的是你所得到的),并行将无济于事。

编辑:你可能如果你有一个读取线程读取文件和另一个执行数据库访问的写入器线程(生产者/消费者),那么看到多线程的好处。这可以帮助你的原因是你总是在阅读,而你总是在写作。如果你写得对,你可以产生多个插入线程,所以你可以尝试并行运行,看看它是否有帮助。

相关问题