我使用spring批处理框架处理mongo db中的大量数据并再次存储在mongo db中
代码如下:
Aggregation agg = newAggregation(
project("field1")
//projection on few fields
group("field1")
//group opeartion
project(
// again project on grouped result
)
).withOptions(newAggregationOptions().allowDiskUse(true).build());
AggregationResults<BeanName> agreatiR = dbTemplate.aggregate(agg,collectionName,BeanName.class);
对于较少的数据(我已经在100k上测试过),聚合框架工作正常,但是对于2M,它会超出16 MB的限制。
我不想使用$ out操作,因为首先它不是必需的,并且似乎没有任何API在spring数据中使用$ out mongo
此外,我已阅读返回游标,这将允许超出大小限制,但再次似乎没有任何弹簧数据mongo API支持。
Mongo DB版本:2.6
Mongo驱动程序版本:3.2.0
答案 0 :(得分:0)
我知道您一次尝试提交2M。这很糟糕,因为在内存中加载所有bean。
你应该使用commit-interval
来减少这项庞大的工作。你做到了吗?
<tasklet transaction-manager="transactionManager">
<chunk reader="itemReader" writer="itemWriter" commit-interval="500"/>
</tasklet>