Mongo Aggregate使用java驱动程序查询大数据?

时间:2016-05-13 11:56:35

标签: java spring mongodb spring-data-mongodb mongo-java-driver

我使用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

1 个答案:

答案 0 :(得分:0)

我知道您一次尝试提交2M。这很糟糕,因为在内存中加载所有bean。

你应该使用commit-interval来减少这项庞大的工作。你做到了吗?

<tasklet transaction-manager="transactionManager">
        <chunk reader="itemReader" writer="itemWriter" commit-interval="500"/>
    </tasklet>

see configuring a step in official doc