mongodb数据量有1300+万,文件大小在36g左右,用_id做$in 查询,就算是一次查询几十条,竟然需要4分钟。
java是多线程同时查一张表,_id是自己定义的,部分查询代码如下
DBObject o = new BasicDBObject();
DBObject value = new BasicDBObject();
DBCollection dataCollection = null;
DBCollection dptCollection = db.getCollection("dpt");
for(Entry<String, List<String>> entry : grupByDate.entrySet()){
log.info("mongo find $in size=" + entry.getValue().size());
value.put("$in", entry.getValue());
o.put("_id", value);
dataCollection = db.getCollection("data" + entry.getKey());
DBCursor dataResult = dataCollection.find(o, fields);
for(DBObject data : dataResult){
dataPart.put(String.valueOf(data.get("_id")), data);
}
DBCursor dptResult = dptCollection.find(o, dptFields);
for(DBObject dpt : dptResult){
dptPart.put(String.valueOf(dpt.get("_id")), dpt);
}
}
望高手解答
一条数据平均2k多,数据量也不大,我见别人比你这大多的量也很快,看看从以下方向考虑:
1 机器的配置,尤其是内存,做查询的时候top观察一下,看瓶颈是不是在IO上面
2 从程序角度做优化,比如增加中间cache,因为是id查询,用redis应该能满足要求
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。