由于内存限制,我需要将结果从sql-component(List<Map<column,value>>
)拆分为更小的块(几千个)。
我知道
from(sql:...).split(body()).streaming().to(...)
我也知道
.split().tokenize("\n", 1000).streaming()
但后者不使用List<Map<>>
并且还返回一个String。
是否有开箱即用的方式来创建这些块?或者我是否需要在拆分后面添加自定义聚合器?或者还有另一种方式吗?
修改 土壤工人要求的其他信息: 目前,sql端点以这种方式配置:
SqlEndpoint endpoint = context.getEndpoint("sql:select * from " + lookupTableName + "?dataSource=" + LOOK_UP_DS,
SqlEndpoint.class);
// returns complete result in one list instead of one exchange per line.
endpoint.getConsumerProperties().put("useIterator", false);
// poll interval
endpoint.getConsumerProperties().put("delay", LOOKUP_POLL_INTERVAL);
使用它的路由应该每天轮询一次(我们将很快添加CronScheduledRoutePolicy)并获取一个完整的表(视图)。所有数据都使用自定义处理器转换为csv,并通过自定义组件发送到专有软件。该表有5列(小字符串)和大约20M条目。 我不知道是否存在内存问题。但我知道在我的本地机器上3GB是不够的。有没有办法近似记忆足迹,知道一定数量的Ram是否足够?
提前致谢
答案 0 :(得分:0)
maxMessagesPerPoll将帮助您批量获得结果