如何快速将大数据传输到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)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将大数据表复制到 MySql 表?

使用JDBC在MySQL数据库中快速批量插入数据

[JavaWeb-JDBC]JDBC_快速入门_idea jdbc连接Mysql数据库

JDBC编程

JDBC编程

使用mysql jdbc获取快速结果集