jdbc流stream读取超大数据

本文介绍了一种使用JDBC流式读取方式优化MySQL大规模数据迁移的方法,通过对比传统方式与流式读取方式,展示了如何有效减少内存占用并提高数据迁移效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天在做分库分表,涉及到数据迁移,然后设计的方案是使用mybatis将数据分批读取出来,每批大概40--50万条数据,然后将查询来的数据再insert进去,发现这个效率很低,程序有卡顿,而且客户端很容易OOM。

找了一下原因就是jdbc默认的读取数据的时候,会将要查询的数据一次性读到内存中,再通过resultSet循环读取出来,这样子40--50万条数据很容易就撑爆内存,然后调研了下发现,其实可以通过jdbc流的方式读取数据,这种方式可以将读取出来的每一条数据查询到客户端,再执行insert操作,这样机器负载就会轻很多,实际操作了下,确实是这样的

上代码

public class StreamTest {

	public static void main(String[] args) throws SQLException, InterruptedException {
		StreamTest streamTest = new StreamTest();

		System.out.println("---------------------------");

		streamTest.selectData("select * from t_item_base_snapshot");

		System.out.println("---------------------------");

		streamTest.selectDataStream("select * from t_item_base_snapshot");
	}

	public static Connection getSqlConnection() {
		
		String url = "";
		String user = "";
		String password = "";
		String driverClass = "com.mysql.jdbc.Driver";

		Connection connection = null;
		
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值