mongodb系列之五:java分頁優化
阿新 • • 發佈:2019-02-12
前面我們提到過,大資料量分頁時,skip如果跳過大量的資料會很慢,這裡針對這一情況,我們優化一下分頁。
看程式碼:
[java] view plaincopyprint?- /**
- * 大資料量資料分頁優化
- * @param page
- * @param pageSize
- * @param lastId 上一頁的最大id
- * @return
- */
- public List<User> largePageList(int page, int pageSize, int lastId) {
-
DB myMongo = MongoManager.getDB("myMongo"
- DBCollection userCollection = myMongo.getCollection("user");
- DBCursor limit = null;
- if (page == 1) {
- limit = userCollection.find()
- .sort(new BasicDBObject("id", 1)).limit(pageSize);
- } else {
-
limit = userCollection
- .find(new BasicDBObject("id", new BasicDBObject(
- QueryOperators.GT, lastId)))
- .sort(new BasicDBObject("id", 1)).limit(pageSize);
- }
- List<User> userList = new ArrayList<User>();
-
while (limit.hasNext()) {
- User user = new User();
- user.parse(limit.next());
- userList.add(user);
- }
- return userList;
- }
- publicstaticvoid main(String[] args) {
- UserDao userDao = new UserDao();
- List<User> largePageList = userDao.largePageList(1,5,0);//第一頁
- print(largePageList);
- System.out.println("============");
- List<User> largePageList2 = userDao.largePageList(2,5,5);//第二頁 需要記錄上一頁的最大id
- print(largePageList2);
- System.out.println("============");
- List<User> largePageList3 = userDao.largePageList(3,5,11);//第三頁 需要記錄上一頁的最大id
- print(largePageList3);
- }
- publicstaticvoid print(List<User> largePageList){
- for(User user : largePageList){
- System.out.println(user);
- }
- }