我必须将大约500万行数据从Teradata传输到MySQL。任何人都可以建议我通过网络最快的方式,而不使用文件系统。我是Teradata和MySQL的新手。我希望每周将此传输作为批处理作业运行,因此我正在寻找可以完全自动化的解决方案。任何建议或提示将不胜感激。
我已经使用JDBC编写代码来从Teradata获取记录并将它们插入MySQL。但它非常慢,所以我希望使代码更有效率。我保持通用,因为我没有解决方案受到我的实现的限制,因为随着现有代码的更高效,我也对其他替代方案持开放态度。但我不想使用文件系统,因为维护或更新脚本并不容易。
我的实施:
从teradata获取记录:
connection = DBConnectionFactory.getDBConnection(SOURCE_DB);
statement = connection.createStatement();
rs = statement.executeQuery(QUERY_SELECT);
while (rs.next()) {
Offer offer = new Offer();
offer.setExternalSourceId(rs.getString("EXT_SOURCE_ID"));
offer.setClientOfferId(rs.getString("CLIENT_OFFER_ID"));
offer.setUpcId(rs.getString("UPC_ID"));
offers.add(offer);
}
在mySQL中插入记录:
int count = 0;
if (isUpdated) {
for (Offer offer : offers) {
count++;
stringBuilderUpdate = new StringBuilder();
stringBuilderUpdate = stringBuilderUpdate
.append(QUERY_INSERT);
stringBuilderUpdate = stringBuilderUpdate.append("'"
+ offer.getExternalSourceId() + "'");
statement.addBatch(stringBuilderUpdate.toString());
queryBuilder = queryBuilder.append(stringBuilderUpdate
.toString() + SEMI_COLON);
if (count > LIMIT) {
countUpdate = statement.executeBatch();
LOG.info("DB update count : " + countUpdate.length);
count = 0;
}
}
if (count > 0) {
// Execute batch
countUpdate = statement.executeBatch();
}
有人可以告诉我,我们是否可以使这个代码更有效率???
由于
PS:请忽略上面代码中的语法错误,因为此代码工作正常。由于复制和粘贴,某些信息可能会丢失。
答案 0 :(得分:1)
将数据导入MySQL的fastest方法是使用LOAD DATA INFILE
或mysqlimport
,它是LOAD DATA INFILE
的命令行界面,它涉及从文件加载数据,最好驻留在本地文件系统上。
从文本文件加载表时,请使用LOAD DATA INFILE。这是 通常比使用INSERT语句快20倍。
因此,尽管您不想使用文件系统,但我建议考虑创建转储到文件,将其传输到MySQL服务器并使用上述方法加载数据。
所有这些任务都可以通过脚本完全自动化。