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

问题描述 投票:0回答:1

以下是 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++;

与:

                        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 能够上传数百万行! ! !但是我在任何地方都找不到任何真实的例子。如何克服java异常?


任何人都可以展示一个使用

outOfMemory

jdbc
(不是 FastloadCSV!)的示例来上传 100 万行吗?
 

PS:

1)

Fastload

增加堆空间达不到目的,因为每个额外的

xmx
方法执行速度都会变慢,并且额外的堆有限制(通常是4g)

2)我不需要

addBatch()

,因为它在 ttu 14 之前不支持文本限定符并且还有其他问题

    

java jdbc teradata
1个回答
4
投票
FastloadCSV

,然后简单地

setAutoCommit(false)
,例如每 50,00 或 100,000
executeBatch
之后,在内存耗尽之前。最后你
addBatch
请参阅developer.teradata.com 上的

加速您的 JDBC/ODBC 应用程序

© www.soinside.com 2019 - 2024. All rights reserved.