如何快速将大数据传输到mysql(JDBC)?
Posted
技术标签:
【中文标题】如何快速将大数据传输到mysql(JDBC)?【英文标题】:How to transfer big data to mysql (JDBC) quickly? 【发布时间】:2017-08-25 22:26:02 【问题描述】:我有一个代码,它管理ArrayList<priceItem>
并使用preparedStatement 将每个项目引导到mysql。我不知道如何提高这段代码的速度。我尝试使用.addBatch()
,但没有帮助。这是代码。
try
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
preparetStmt = connection.prepareStatement(INSERT_NEW);
for (int i = 0; i < priceItems.size(); i++)
preparetStmt.setString(1, priceItems.get(i).getName());
preparetStmt.setString(2, priceItems.get(i).getQuantity());
preparetStmt.setString(3, priceItems.get(i).getCost());
preparetStmt.setString(4, priceItems.get(i).getAnnotation());
preparetStmt.addBatch();
preparetStmt.executeBatch();
if (!connection.isClosed())
System.out.print("DB is closed.");
catch (SQLException e)
e.printStackTrace();
帮助我找到提高加载此语句的速度的方法。对于 1500 个项目,需要 2 分钟以上。我需要发送超过 15 万件物品。
【问题讨论】:
您必须使用 JDBC 还是直接访问数据库服务器?如果您有像 csv 这样的文件,将批次插入数据库可能会快得多 检查 addBatch() 的文档。你这样做的方式看起来不对。您也可以查看网络上的批处理教程。解决这些类型的问题将需要备份并从已知的开始并工作到未知。所以很难有人来帮助你。 另外,您应该清楚这是一次性操作,还是典型的常规数据集移动。这会对架构、索引等产生影响。 现在我正在使用 JDBC 并连接到本地主机,但将来我想在站点上重新定位 db。我使用 ApachePoi 提取 excel 数据并将其转换为数组列表 MySQL 可以直接加载 CSV 数据。根本不需要涉及 JDBC 或 Java。你为什么要测试连接是否在不可能关闭的地方关闭,为什么要打印它不是关闭的? 【参考方案1】:许多改进此代码的方法:
-
创建更小的批次以减少网络延迟。
使用事务管理器并提交批处理。您的回滚段不应与总事务一样大。
在 finally 块中关闭您的资源。
【讨论】:
以上是关于如何快速将大数据传输到mysql(JDBC)?的主要内容,如果未能解决你的问题,请参考以下文章