当前位置:数据库 > DB2 >>

mongodb分页优化

mongodb分页优化
 
现在参与一个项目的开发,需要用java查询mongodb数据库,在这里分页用的skip sort 和limit结合,查询语句如下(已经在相关字段建立索引)
 
DBCursor cursor = collection.find(query).skip((skip - 1) * PAGESIZE).sort(new BasicDBObject("starttime", -1)).limit(PAGESIZE);//PAGESIZE=10  

 

 
由于分页,这里需获取符合条件的总数 语句如下
 
int count = cursor.count()

 

 
根据count和PAGESIZE的两个数据来分页。由于带条件的count()方法执行起来特别耗时,我用二百万的数据测试了一下,cursor.count()就耗时6.5s多,mongodb权威指南这不书也指出count()方法随着查询条件越多,执行速度越慢。
 
现在问题出来了,现在模拟一下操作
 
1)点击查询执行查询方法queryLists()(这是我代码中的方法名)并执行耗时的count()方法获取符合条件的数量,进行分页
 
2)点击下一页或者点击某一页时,同样执行queryLists()方法,同样也需要执行该方法体中的count()方法,这样count方法又耗去一部分时间
 
显然用户体验不是很好,每次点击查询时就很耗时了,点击下一页或者某一页时同样还得等待,这样的话谁都受不了
 
下面是我的优化方案
 
1)设置一个变量clickQuery,当用户点击查询按钮时 clickQuer赋值为0.当点击下一页或者上一页或者跳转页面时clickQuery=1.
 
     也就是说用clickQuery来判断用户是否点击查询按钮
 
2)既然点击查询时已经获取了count,何必再点击下一页时在执行cursor.count()方法呢?所以我的做法就是把点击查询的时候获取的count保存起来
 
    当用户点击下一页的时候,直接读取已经保存的count,而不是执行耗时的cursor.count()方法
 
方法优点:
 
      点击下一页或者某一页或者跳转页面时,由于已经保存过查询时的count,所以速度很快
 
方法缺点:
 
    用户点击查询按钮时,因为要执行cursor.count方法,所以还是很慢。
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,