mongo查询调用方法优化:
环境 :3.2.7分片集群,wiredTiger存储引擎 java mongo-java-driver 3.2.2
1 经测试mongo查询时,在有多个索引的情况下,mongo并没有选用合适的索引,需要使用 count方法的 CountOptions 指定索引,find 时会提取缓存数据2 针对count的数据量过大的情况,使用限制数量的方法,但是需要使用count的CountOptions
3 索引优化建议,mongo 查询是单个操作只能使用一个索引,针对查询场景建立索引 sort字段放在索引最后即可。
4 经测试在使用count方法并且限制 limit 数量为30w的情况下,2000w的数据量,分页查询的速度能控制在1s以下,服务器为8c32g*3的mongos集群
public void queryDemo(){
List list = new LinkedList<>( );
MongoCollection<Document> mongoCollection = MongodbUtils.getTestMongoCollection( );
Bson filter = and(eq("fieldName","value"));
CountOptions options = new CountOptions();
options.maxTime(180, TimeUnit.SECONDS);
options.skip(0);
options.limit(300000);
options.hintString("indexName");
long count = mongoCollection.count(filter, options);
MongoCursor<Document> iter = mongoCollection.find(filter).skip(0).limit(10).iterator();
while( iter.hasNext( ) ) {
Document doc = iter.next( );
list.add( BillDocUtil.docToSubmit( doc ) );
}
}