招聘&找人导入excel数据到MySQL

头像
150****3689
1674阅读39评论

每个excel数据量大概为6w行, 40列

从excel 或者json格式都可以, 我们已经有从excel转出的json数据. 主要需要的是高效率导入数据库这步

希望快速的导入MySQL以用于后续处理

语言不限

只需要写出核心代码, 交付我方用于其他模块儿使用

具体费用双方商议


已有多位联系我了, 不需要再花电费加我了, 有兴趣可以评论, 我如有需要会主动联系你

最后修改于

招聘类型:
职业:
工作方式:
需消耗电量 5
顶 2
收藏
举报
充电支持Ta
1 人已充电
精选评论
头像
等级0

java python都可进行开发

头像
等级0

一定有性能和场景要求吧,我想到的是直接开源DataX
理论上可以带宽跑满
具体也可以根据情况和场景要求

datax不管是性能和数据库多样性都都做得很好,但可惜的是datax并不支持直接从Excel导入,我的开源项目https://github.com/Breeze0806/go-etl,在架构上借鉴了datax,直接支持Excel(xlsx)的导入。

头像
等级0

在项目中做过Excel文件导入数据库。使go语言开发。可以和我联系。

头像
等级0

如果是task并行mysql batch insert,1GB左右csv文件5min左右完成,csv的1GB数据行数比excel多很多啊

头像
等级0

这里我写过一个开源项目可以帮你,使用go语言写的,excel要求是xlsx的文本格式,mysql要求5.6版本以上,https://github.com/Breeze0806/go-etl, 速度上你不用担心,这个项目已经处理过上千万行数据,但是异常数据检测、提示、修复或另行管理还是需要深入探讨的,因为是开源项目你可以先试试效果,如果好用请别白嫖,请给个star哦!如果有其他的需求,请联系我。

最后修改于

头像
等级0

四年工作经验, 前后端去全找

头像
等级0

明显很多人没有试过1万行以上的数据导入mysql。要考虑的因素并不是什么语言,而是影响速度的关键点在哪里。1万行插入,15秒内完成算合格,用的不对要5分钟以上,6万行相应乘以比例。
另一个问题是异常数据检测、提示、修复或另行管理,重复数据如何避免冲突退出。
要做好、适应日常工作并不容易。

头像
等级0

5年Java后端研发,经验丰富,有需要联系我

头像
等级0

不是,这个功能 mac 的 https://sequelpro.com/ 直接支持的呀。

头像
等级0

我想竞选
目前看出该需求需要解决的问题
1 oom 2.高io 3时效性和与准确性 4 监控

我的优势
高并发场景处理经验比较丰富 个人做bi项目长达2年excel大量数据导入导出有开发经验

头像
等级0

大数据经验,处理过千万数据导入,导出,半小时内处理完成

头像
等级0

大数据量,应该碰到的是内存崩溃,还有就是数据长时间未落库,其他应该没啥问题😂

头像
等级0

我去年正好做某银行项目时用JAVA语言完成了一个类似的企业级解决方案,可以通过配置的方式完成excel到数据库字段的映射,同时可以在日志文件或专门建立的数据库表中查看执行日志,分析出错原因,
几乎能直接拿来用,有需要可以和我联系,谢谢!

头像
等级0

为了高效导入大量数据到MySQL数据库,你可以采用以下方法:

  1. 批量插入优化:将数据分成小批量进行插入,而不是每行都执行插入操作。这样可以减少与数据库的通信次数,提高导入速度。

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    // 建立数据库连接
    Connection connection = null;
    try {
        String url = "jdbc:mysql://localhost:3306/database_name";
        String username = "your_username";
        String password = "your_password";
        connection = DriverManager.getConnection(url, username, password);
    
        // 设置自动提交为false
        connection.setAutoCommit(false);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    
    String sql = "INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...)";
    try (
        PreparedStatement statement = connection.prepareStatement(sql);
    ) {
        int batchSize = 1000; // 每批次插入的记录数
        int count = 0;
    
        for (YourDataClass item : data) {
            // 设置参数
            statement.setString(1, item.getProperty1());
            statement.setInt(2, item.getProperty2());
            // ...
            statement.addBatch();
    
            if (++count % batchSize == 0) {
                // 执行批量插入
                statement.executeBatch();
                connection.commit();
            }
        }
    
        // 执行剩余的批量插入
        statement.executeBatch();
        connection.commit();
    
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (connection != null) {
            try {
                // 恢复自动提交
                connection.setAutoCommit(true);
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    在上面的代码中,我们设置了每批次插入的记录数为1000,你可以根据实际情况进行调整。在每个批次插入后,使用commit()方法提交更改,以保持数据的一致性。

  2. 使用连接池:使用连接池可以减少数据库连接的创建和销毁开销,并提供连接的复用。

    import org.apache.commons.dbcp2.BasicDataSource;
    import javax.sql.DataSource;
    
    // 创建连接池
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setUrl("jdbc:mysql://localhost:3306/database_name");
    dataSource.setUsername("your_username");
    dataSource.setPassword("your_password");
    
    // 设置连接池属性
    dataSource.setInitialSize(10);
    dataSource.setMaxTotal(100);
    dataSource.setMaxIdle(20);
    dataSource.setMinIdle(5);
    
    // 从连接池中获取连接
    Connection connection = null;
    try {
        connection = dataSource.getConnection();
        // ...
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    通过使用连接池,可以更有效地管理和利用数据库连接。连接池可以在数据库连接的需求量增加时动态地创建连接,同时在连接不再使用时将其返回给连接池进行重用。

头像
等级0

MySQL客户端可以直接导入