java - 春季批处理:MySQL分页
问题描述
我想从大表 MySQL 在 Kafka 主题中发送 600 000 000 条消息。我想将 Spring Batch 用于此用途,但它使用查询类型:
SELECT c1, c2, c3 FROM t1 LIMIT offset, size;
在 spring-batch/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/MySQLPagingQueryProvider.java 中生成:
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int offset = (page * pageSize) - 1;
offset = offset<0 ? 0 : offset;
String limitClause = new StringBuilder().append("LIMIT ").append(offset).append(", 1").toString();
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
}
这个解决方案非常慢,因为LIMIT offset, size
每次迭代都需要重新读取。我更喜欢:
SELECT c1, c2, c3 FROM t1 WHERE primary > last_primary_lot LIMIT size;
这是可能的 ?
解决方案
推荐阅读
- reactjs - 无法解析“反应路由器”
- server - 在服务器模式下启动 GSM 调制解调器时如何获取公共 IP 地址?
- excel - 跨多个工作表求和时忽略隐藏工作表
- .htaccess - 如何在不影响根目录索引页的情况下从 url 隐藏子目录
- javascript - JavaScript通过innerText罢工不起作用
- swift - 创建一个“新建”按钮,在 Swift 中创建 3 个 UI 文本字段
- javascript - function.promise.then() 和 function.then() 的区别
- android - 我无法使用 oauth 2.0 与我的服务器使用 android 连接
- typescript - 打字稿中的“鸭子”打字与函数参数
- go - 为什么复制指向 Go 结构的指针不会保持与原始结构的链接?