mongodb記憶體不足怎麼解決?
mongodb每一個文件預設只有16M。聚合的結果是一個BSON文件,當超過16M大小時,就會報記憶體不夠錯誤。
exceeded memory limit for $group.but didn't allow external sort.
可以採用開啟使用磁碟來解決大小問題。例如
db.flowlog.aggregate([{$group:{_id:"$_id"}}], {allowDiskUse: true})
java程式碼片段
AggregationOptions options = new AggregationOptions.Builder().allowDiskUse(true).build(); Aggregation agg = Aggregation.newAggregation().withOptions(options);
但是如果結果集超過了16M,那麼依然會報錯誤。
採用一個下面的聚合方法
Aggregation agg = Aggregation.newAggregation( Aggregation.group(field1 , field2 , field3) .sum(field4).as("sampleField1") .sum(field5).as("sampleField2"), Aggregation.project(field4, field5), new AggregationOperation() { @Override public DBObject toDBObject(AggregationOperationContext context) { return new BasicDBObject("$out", "test"); } }).withOptions(options); mongo.aggregate(agg, sourceCollection, Test.class);
如果要在聚合的時候增加一個常量,可採用以下形式
Aggregation agg = Aggregation.newAggregation( Aggregation.group( , OnofflineUserHistoryField.MAC , StalogField.UTC_CODE) .sum(OnofflineUserHistoryField.WIFI_UP_DOWN).as(OnofflineUserHistoryField.WIFI_UP_DOWN) .sum(OnofflineUserHistoryField.ACTIVE_TIME).as(OnofflineUserHistoryField.ACTIVE_TIME), Aggregation.project("mac","buildingId","utcCode",OnofflineUserHistoryField.ACTIVE_TIME, OnofflineUserHistoryField.WIFI_UP_DOWN).and( new AggregationExpression() { @Override public DBObject toDbObject(AggregationOperationContext context) { return new BasicDBObject( "$cond", new Object[]{ new BasicDBObject( "$eq", new Object[]{ "$tenantId", 0} ), 20161114, 20161114 }); } }).as("day").andExclude("_id"), 或者 and(new AggregationExpression() { @Override public DBObject toDbObject(AggregationOperationContext context) { return new BasicDBObject("$add", new Object[] { 20141114 }); } }).as("day").andExclude("_id"), new AggregationOperation() { @Override public DBObject toDBObject(AggregationOperationContext context) { return new BasicDBObject("$out", "dayStaInfoTmp"); } }).withOptions(options);
更多mongodb相關文章請關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1020/viewspace-2833444/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- win10記憶體不足怎麼解決_win10記憶體不足怎麼辦Win10記憶體
- 虛擬記憶體有什麼用 虛擬記憶體不足怎麼解決記憶體
- w10老顯示記憶體不足怎麼解決 w10記憶體總是顯示記憶體不足處理方法記憶體
- win10遠端記憶體不足怎麼解決_win10遠端提示記憶體不足如何處理Win10記憶體
- vertica記憶體不足的解決方案記憶體
- pycharm提示記憶體不足怎麼辦PyCharm記憶體
- win10開啟office提示記憶體或磁碟不足怎麼解決Win10記憶體
- w10計算機記憶體不足怎麼辦_w10計算機記憶體不足請關閉以下程式解決方法計算機記憶體
- win10遊戲提示視訊記憶體不足如何處理 win10玩遊戲提示視訊記憶體不足怎麼解決Win10遊戲記憶體
- win10記憶體不足會黑屏嗎_win10電腦記憶體不足黑屏了怎麼辦Win10記憶體
- Composer 記憶體不足解決方案 PHP Fatal error: Out of memory記憶體PHPError
- 故障排除指南:MySQL執行記憶體不足怎麼辦?MySql記憶體
- win10遊戲記憶體不足怎麼辦_win10玩遊戲提示記憶體不足處理方法Win10遊戲記憶體
- win10 記憶體或磁碟空間不足無法顯示或列印圖片怎麼解決Win10記憶體
- MongoDB 如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- MongoDB如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- win10電腦玩荒野大鏢客2遊戲提示虛擬記憶體不足怎麼解決Win10遊戲記憶體
- win10更新失敗提示記憶體不足怎麼回事_win10記憶體不足導致更新失敗如何修復Win10記憶體
- mongodb 對記憶體的嚴重佔用以及解決方法MongoDB記憶體
- Allowed memory size 記憶體不足記憶體
- windows下提示虛擬記憶體不足如何解決?Windows記憶體
- SQLServer因為OS虛擬記憶體不足而hang住異常解決-鎖定記憶體頁 (LPIM)SQLServer記憶體
- c盤記憶體不足會影響絕地求生閃退嗎_c盤記憶體不足影響絕地求生閃退解決方法記憶體
- mongodb埠占用怎麼解決MongoDB
- win10記憶體佔用高怎麼解決_win10系統記憶體佔用高解決步驟Win10記憶體
- win10系統出現視訊記憶體不足的解決方法Win10記憶體
- 0x00000000記憶體read怎麼解決 0x00000000記憶體read無法開機記憶體
- 電腦記憶體佔用過高怎麼辦 電腦記憶體佔用過高解決方法記憶體
- mongodb find報錯怎麼解決MongoDB
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- win10開機記憶體佔用高怎麼解決_win10開機後記憶體佔用高的解決措施Win10記憶體
- [20201110]伺服器記憶體不足.txt伺服器記憶體
- Linux記憶體不足的處理方法Linux記憶體
- win10工作管理員記憶體佔用過高怎麼解決Win10記憶體
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- win10記憶體佔用率高怎麼解決 win10記憶體佔用率突然爆滿處理方法Win10記憶體
- win10 audiodg狂佔記憶體怎麼辦_win10 audiodg佔用記憶體過高的解決方法Win10記憶體
- Mac記憶體空間不足怎麼辦?試試刪除這幾個資料夾!Mac記憶體