Teradata-jdbc:如果java有内存限制,使用Fastload有什么意义?

时间:2014-10-31 23:03:05

标签: java jdbc teradata

以下是teradata网站上示例jdbc Fastload程序的链接:http://developer.teradata.com/doc/connectivity/jdbc/reference/current/samp/T20205JD.java.txt

它只插入一行,所以我通过替换以下代码修改它以插入500K行:

                        pstmt.setInt(1, 1);
                        pstmt.setString(2, strBuf);
                        pstmt.addBatch();
                        batchCount++;

with:

                        for (int i = 0; i < 500000 ; i ++ ) {
                        pstmt.setInt(1, i);
                        pstmt.setString(2, strBuf);
                        pstmt.addBatch();
                        batchCount++;
                        }

它当然失败了,因为java内存不足。

所以Fastloads jdbc无法上传偶数500K行非常简单的数据。 。因为方法addBatch()会在某些时候抛出outOfMemory异常。

但我读到Fastload能够上传数百万行! ! !但是我找不到任何真实的例子。如何克服outOfMemory java异常?

任何人都可以使用jdbcFastload(不是FastloadCSV!)来展示一个示例来上传让我们说1M行吗?


PS:

1)xmx堆空间的增加违背了目的,因为每个额外的addBatch()方法执行速度较慢,而额外的堆有限制(通常为4 g)

2)我不需要FastloadCSV,因为它在ttu 14之前不支持文本限定符并且有其他问题

1 个答案:

答案 0 :(得分:4)

您必须setAutoCommit(false),然后只需executeBatch多次,例如在每个50,00或100,000 addBatch之后,在你的内存不足之前。最后你commit

请参阅developer.teradata.com上的Speed up your JDBC/ODBC applications