我使用 apache Camel 作为从 (
select *...
) PostgreSQL 到 (insert...
) MariaDB 的 ETL。
PostgreSQL中有很多记录(超过1M),我想以批处理的方式进行。
我尝试过使用几个标志(
batchCount
,batchSize
),但没有一个有效。
我也在 Apache Camel 文档中进行了搜索,但没有成功。
from("sql:SELECT * FROM my_schema.trees?dataSource=#postgersqlDataSource&batch=true")
.convertBodyTo(String.class)
.process(ex -> {
log.info("batch insert for single table");
List<Map<String, Object>> rows = ex.getIn().getBody(List.class);
log.info(String.format("Value: %s", rows.size()));
})
.to("stream:out");
但是程序崩溃了,因为它将所有内容加载到内存中(当然可以使用 1 条记录)。
有什么建议吗?
它超出了
Spring boot
。
batch
选项仅适用于生产者(例如to)。
https://camel.apache.org/components/4.4.x/sql-component.html
相反,请查看
outputType=StreamList
,您可以将其与拆分 EIP(在流模式下)结合起来来处理行,而无需将所有行加载到内存中。
这也意味着您一次处理 1 行
from sql
split
process (1 row here)