使用ResultSet选择10M记录并转储到HDFS

时间:2014-07-09 23:13:15

标签: sql performance jdbc

在一个程序中,我做了类似的事情:

ResultSet rs = con.executeQuery(sql);
List l = new List();
while(rs.next()){
   l.append(rs.getObject(xxx))
}

fileSys.write(l)

sql有10M记录。这个功能需要2小时才能完成。循环占用大部分时间。我想知道有更好的方法来做这件事吗?是否可以使用多线程?

1 个答案:

答案 0 :(得分:1)

如果你必须通过网络从一个系统(SQL)到另一个系统(HDFS)移动大量数据(Giga Bytes),那么驱动复制的处理器中的线程(你的代码)将无济于事

1 您可以尝试在服务器上运行代码network throughput

2 您可以尝试仅复制自上次更改后的记录(HDFS尚未拥有该副本)。从长远来看,这将改善性能。第一次会很慢。第二次和第三次它会更快,因为你只移动已经改变的东西。使用UTC时间戳和"自"是基本概念