2016-05-13 57 views
0

我使用彈簧批處理框架用於蒙戈分貝處理大量的數據,和在蒙戈分貝再次存儲Mongo Aggregate使用java驅動程序對大數據進行查詢?

的代碼如下:

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的限制。

我不想使用$進行操作,首先它不是必需的,也有沒有任何似乎API使用$出春天的數據蒙戈

而且我已閱讀返回遊標,這將允許超出尺寸限制,但似乎沒有任何彈簧數據mongo API支持。

蒙戈DB版本:2.6

Mongo的驅動程序版本:3.2.0

+0

的大集合,試圖在10萬條記錄,以使其工作分裂您處理。 – jeorfevre

+0

我希望如果可以得到一個解決方案的工作相同的數據沒有分裂 –

+0

你可以提供代碼itemprocessor?你一次處理多少數據? – jeorfevre

回答

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

+0

我沒有使用塊而是使用tasklet來獲取整個數據。這是因爲沒有其他方法可以逐塊讀取數據 –

相關問題