1. 程式人生 > >mongodb系列之五:java分頁優化

mongodb系列之五:java分頁優化

前面我們提到過,大資料量分頁時,skip如果跳過大量的資料會很慢,這裡針對這一情況,我們優化一下分頁。

看程式碼:

[java] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. /** 
  2.      * 大資料量資料分頁優化 
  3.      * @param page 
  4.      * @param pageSize 
  5.      * @param lastId 上一頁的最大id 
  6.      * @return 
  7.      */
  8.     public List<User> largePageList(int page, int pageSize, int lastId) {  
  9.         DB myMongo = MongoManager.getDB("myMongo"
    );  
  10.         DBCollection userCollection = myMongo.getCollection("user");  
  11.         DBCursor limit = null;  
  12.         if (page == 1) {  
  13.             limit = userCollection.find()  
  14.                     .sort(new BasicDBObject("id"1)).limit(pageSize);  
  15.         } else {  
  16.             limit = userCollection  
  17.                     .find(new BasicDBObject("id"new BasicDBObject(  
  18.                             QueryOperators.GT, lastId)))  
  19.                     .sort(new BasicDBObject("id"1)).limit(pageSize);  
  20.         }  
  21.         List<User> userList = new ArrayList<User>();  
  22.         while (limit.hasNext()) {  
  23.             User user = new User();  
  24.             user.parse(limit.next());  
  25.             userList.add(user);  
  26.         }  
  27.         return userList;  
  28.     }  
  29.     publicstaticvoid main(String[] args) {  
  30.         UserDao userDao = new UserDao();  
  31.         List<User> largePageList = userDao.largePageList(1,5,0);//第一頁
  32.         print(largePageList);  
  33.         System.out.println("============");  
  34.         List<User> largePageList2 = userDao.largePageList(2,5,5);//第二頁   需要記錄上一頁的最大id
  35.         print(largePageList2);  
  36.         System.out.println("============");  
  37.         List<User> largePageList3 = userDao.largePageList(3,5,11);//第三頁   需要記錄上一頁的最大id
  38.         print(largePageList3);  
  39.     }  
  40.     publicstaticvoid print(List<User> largePageList){  
  41.         for(User user : largePageList){  
  42.             System.out.println(user);  
  43.         }  
  44.     }