mongos 分页查询优化

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 ) );
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值