在 mongo 使用過程中遇到了一個問題,需求就是要對mongo 庫中查詢到數據進行分頁,mongo庫我們知道都會存儲大容量的數據,如果庫里數據多的話,這時會報一個 Query failed with error code 96 and error message 'Executor error during find command:OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM.Add an index, or specify a smaller limit.'
按照錯誤提示,知道這是排序的時候報的錯,因為 mongo 的 sort 操作是在內存中操作的,必然會占據內存,同時mongo 內的一個機制限制排序時最大內存為 32M,當排序的數據量超過 32M,就會報上面的這個錯,解決辦法就像上面提示的意思,一是加大 mongo 的排序內存,這個一般是運維來管,也有弊端,就是數據量如果再大,還要往上加。另一個辦法就是加索引,這個方法還是挺方便的。創建索引及時生效,不需要重啟服務。 創建索引也不難,
db.你的collection.createIndex({"你的字段": -1}),此處 -1 代表倒序,1 代表正序;
db.你的collecton.getIndexes();
這兩個語句,第一個是添加索引,第二個是查詢索引,如果查看到你剛才添加的那個索引字段,就說明索引添加成功了。這時候在你的程序里再運用 sort 方法的話,這樣就不會報錯而且速度很快。
添加索引會帶來一定的弊端,這樣會導致數據插入的時候相對之前較慢,因為索引會占據空間的。綜上考慮,根據實際情況判斷采用合適的方法。