Java怎么实现几十万条同时数据插入(三种基本方法测试)

这篇具有很好参考价值的文章主要介绍了Java怎么实现几十万条同时数据插入(三种基本方法测试)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1,使用批量插入

 2,使用多线程

3,使用存储过程


在Java中实现插入几十万条数据,有多种方法可以使用。以下是其中的几种:

1,使用批量插入

使用批量插入可以有效地提高插入速度。下面是一个示例代码:

Connection conn = null;
PreparedStatement ps = null;

try {
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");
    conn.setAutoCommit(false);

    String sql = "INSERT INTO mytable (name, age, email) VALUES (?, ?, ?)";
    ps = conn.prepareStatement(sql);

    for (int i = 0; i < data.size(); i++) {
        ps.setString(1, data.get(i).getName());
        ps.setInt(2, data.get(i).getAge());
        ps.setString(3, data.get(i).getEmail());
        ps.addBatch();

        if ((i + 1) % 1000 == 0) { // 每1000条数据执行一次批量插入
            ps.executeBatch();
            conn.commit();
        }
    }

    ps.executeBatch();
    conn.commit();
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    if (ps != null) {
        try {
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 2,使用多线程

使用多线程可以将数据分为多个部分并行插入,提高效率。以下是一个示例代码

final int THREAD_COUNT = 10; // 线程数
final int BATCH_SIZE = data.size() / THREAD_COUNT; // 每个线程处理的数据量

ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);

for (int i = 0; i < THREAD_COUNT; i++) {
    final int startIndex = i * BATCH_SIZE;
    final int endIndex = (i + 1) * BATCH_SIZE;

    executor.submit(new Runnable() {
        public void run() {
            Connection conn = null;
            PreparedStatement ps = null;

            try {
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");
                conn.setAutoCommit(false);

                String sql = "INSERT INTO mytable (name, age, email) VALUES (?, ?, ?)";
                ps = conn.prepareStatement(sql);

                for (int j = startIndex; j < endIndex; j++) {
                    ps.setString(1, data.get(j).getName());
                    ps.setInt(2, data.get(j).getAge());
                    ps.setString(3, data.get(j).getEmail());
                    ps.executeUpdate();
                }

                conn.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (ps != null) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    });
}

executor.shutdown();
while (!executor.isTerminated()) {} // 等待所有线程完成任务

3,使用存储过程

使用存储过程可以将多个SQL操作合并为一个操作,减少通信开销。以下是一个示例代码:文章来源地址https://www.toymoban.com/news/detail-627068.html

Connection conn = null;
CallableStatement cs = null;

try {
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "password");

    String sql = "{CALL insert_data(?, ?, ?)}"; // 存储过程
    cs = conn.prepareCall(sql);

    for (int i = 0; i < data.size(); i++) {
        cs.setString(1, data.get(i).getName());
        cs.setInt(2, data.get(i).getAge());
        cs.setString(3, data.get(i).getEmail());
        cs.executeUpdate();
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    if (cs != null) {
        try {
            cs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

到了这里,关于Java怎么实现几十万条同时数据插入(三种基本方法测试)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 利用 ThreadPoolTaskExecutor 批量插入数十万条数据

    在批处理插入数据时,如果在单线程环境下是非常耗时的,本篇文章将采用单线程和多线程进行对比,利用 ThreadPoolTaskExecutor 进行多线程批处理插入65w数据,然后和单线程进行对比,最终得到性能优化。 yml 文件配置 spring 容器注入线程池 bean 对象 创建异步线程业务类 创建单

    2024年02月14日
    浏览(42)
  • MYSQL中1000万条数据你是怎么查询的,查询非常慢怎么优化

     数据量越大,花费时间越长   偏移量越大,花费时间越长(浅层分页到深层分页) SQL优化: 1.MySQL自身 2.网络IO 3.SQL自身 --原SQL --避免使用select *  全表扫描,查询效率慢 --按需查找字段    使用索引扫描,主键索引,进行提升 --覆盖索引 查询字段索引覆盖,通过辅助索引提

    2024年02月06日
    浏览(41)
  • java查询数据库百万条数据,优化之:多线程+数据库

    今天去面试时hr问了个关于大量数据查询的问题。 面试官:“我们公司是做数据分析的,每次需要从数据库中查询100万条数据进行分析,该接口不能用分页(不限制具体怎么实现),请问怎么优化sql或者java代码呢??” 如果用普通查询需要5分多分钟才查询完毕,所以我们用

    2024年02月15日
    浏览(53)
  • java实现批量插入数据

    日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,可能由于数据库限制,插入的数据最多不能超过100条(假如限制100条),就算是数据库支持一次性插入千条也会耗内存,如果使用

    2024年02月11日
    浏览(53)
  • 数据库批量插入数据的三种方法

    测试环境:SpringBoot项目+MybatisPlus框架+MySQL数据库+Lombok 方法一: for循环插入(单条) (总耗时:n分钟,每次都要获取连接Connection、释放连接和关闭资源等操作,比较耗时,这里就没测了) 方法二: 批量插入saveBatch (4~7秒,这里用到了MybatisPLus的saveBatch批量插入方法,实际

    2024年02月14日
    浏览(51)
  • MySQL插入数据的三种方法

    insert into:正常的插入数据,插入数据的时候会检查主键或者唯一索引,如果出现重复就会报错。 replace into:替换数据。插入时,如果表中已经存在相同的primary key或者unique索引,则用新数据替换;如果没有相同的primary key或者unique索引,则直接插入。 insert ignore into:插入时

    2023年04月08日
    浏览(35)
  • QT 实现百万级的数据显示内存消耗几十兆

    用QT 开发了一个上位机的工具用来解析串口的数据,数据量比较大 ,如果QT tableview 控件完全显示,内存消耗较大,所以解析结果先建立sql 数据索引,然后通过垂直滚动条的变化动态地获取数据,每次从数据库中提取50条,测试下来内存消耗较小,可以实现百万或者千万级的

    2024年02月11日
    浏览(40)
  • SpringBoot+MyBatis批量插入数据的三种方式

    最近导入表格数据时需要同时插入修改大量数据,研究了一下有三种实现方式 1、用for循环调用sql插入数据 这种方式插入大量数据时,效率非常底下,不推荐 2、利用mybatis的foreach来实现循环插入 这种方式插入大量数据时,好处是不用频繁访问数据库,一条sql搞定,效率比较

    2024年02月16日
    浏览(42)
  • Mysql - 常用插入数据的三种方法详解及练习

    目录 🥙8.1.1 mysql中常用的三种插入数据的语句 1. insert into - 插入数据 2. replace into - 插入替换数据 3. insert ignore - 如果已存在,忽略当前新数据 🥙8.1.2 以上三种方法的练习及区分 🥙8.1.3 说明 🥙8.1.4 牛客练习题 1. insert into - 插入数据 数据库会检查 主键 ,如果出现重复会报错

    2024年03月24日
    浏览(44)
  • mysql插入重复数据的三种处理方式(DUPLICATE、IGNORE、REPLACE )

    “ INSERT   ...  ON  DUPLICATE   KEY  UPDATE   ”, 它是在插入操作时, 如果数据出现重复,则更新重复数据的值 。   示例: INSERT INTO myf_deal_data ( `ID`, `PTNAME`, `PTDATA`, `OPERTIME`, `REPORTTIME` ) VALUES     ( 111, \\\'858_Ua\\\', \\\'219.1000\\\', \\\'2022-04-01 00:45:00\\\', \\\'2022-06-28 10:04:52\\\' )  ON DUPLICATE KEY UPDATE PT

    2024年02月10日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包