有没有处理过单表2亿条数据,33个字段(无大数据字段 text,blob之类的),要求:一个 select-from返回全表数据的

我有一个方案给你参考:
java jdbc 中有个参数称为 游标滚动,只允许向前滚动,不允许往回滚动,通常是作为 pipe line 的流式处理使用,但是核心问题:这么多数据,最后通过 pipe line处理之后,你放哪儿?(当然,这是你需要操心的)


jdbc查询mysql时,默认会一次性将sql查询的数据全部从服务器加载到内存中,当数据过多时,导致内存溢出,最佳的办法:按页分次滚动获取数据即可

Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
// 设置从数据库取得多行的行数大小
statement.setFetchSize(batchSize); 
 // 将此 Statement 对象生成的所有 ResultSet 对象可以包含的最大行数限制设置为给定数
statement.setMaxRows(maxRows);

根据你的服务实际的内存大小,设置每次获取的行数和最大限定,避免过载

请参考

1 个赞