1. 最近随着日志数量的急剧增长,很多透传查询效率非常低。不得不考虑赶紧加上对查询字段的索引来优化透传效率。
2. 出问题的时候我都在想,还不如用以前的文件形式的日志呢!那时候,还可以用ag,ack加快透传的速度。用了mongo怎么没有发挥出它的效果呢!
3. 为了不影响线上业务,赶紧把mongo索引的文档又过了几遍,然后在测试机上使用mongo shell试试效果:
db.click_20170605.ensureIndex({clickid:1},{background:true,sparse:true})
4. linux上的mongo版本稍低,所以用的是ensureIndex().完成后,使用db.click_20170605.getIndexes()显示指定集合上的所有索引(最大64个)
5. db.click_20170605.totalIndexSize()显示索引占用空间大小。 db.system.indexes.find()显示系统中所有的索引(默认包含所有集合的_id字段上的索引,索引学会过滤掉!)
比如这样过滤默认的索引:
db.system.indexes.find({key:{$ne:{"_id":1}}})
或者这样:
db.system.indexes.find({name:{$ne:"_id_"}})
6. 核心代码如下(设置索引字段和options:background等):
DB db = mongoClient.getDB(dbname);
for(String coll:collectionname) {
DBCollection getCollection=db.getCollection(coll);
BasicDBObject field = new BasicDBObject("clickid", 1);
BasicDBObject ops = new BasicDBObject("background",true).append("sparse",true);
getCollection.createIndex(field,ops);
//getCollection.insert((DBObject)com.mongodb.util.JSON.parse(inputjson));
System.out.println("\n index on " + coll + " created " );
}
7. 完整嵌入代码如下:
MongoClient mongoClient = null;
try {
// To connect to mongodb server
mongoClient = new MongoClient( "172.17.0.6" , 27017 );
// Now connect to your databases
@SuppressWarnings("deprecation")
DB db = mongoClient.getDB(dbname);
for(String coll:collectionname) {
DBCollection getCollection=db.getCollection(coll);
BasicDBObject field = new BasicDBObject("clickid", 1);
BasicDBObject ops = new BasicDBObject("background",true).append("sparse",true);
getCollection.createIndex(field,ops);
//getCollection.insert((DBObject)com.mongodb.util.JSON.parse(inputjson));
System.out.println("\n index on " + coll + " created " );
}
//mongoClient.close();
} catch(Exception e) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
finally {
if(mongoClient!=null) {
mongoClient.close();
}
}