1. 最近隨著日志數(shù)量的急劇增長,很多透傳查詢效率非常低擎浴。不得不考慮趕緊加上對查詢字段的索引來優(yōu)化透傳效率煌张。
2. 出問題的時候我都在想,還不如用以前的文件形式的日志呢退客!那時候骏融,還可以用ag,ack加快透傳的速度链嘀。用了mongo怎么沒有發(fā)揮出它的效果呢!
3. 為了不影響線上業(yè)務(wù)档玻,趕緊把mongo索引的文檔又過了幾遍怀泊,然后在測試機(jī)上使用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()顯示系統(tǒng)中所有的索引(默認(rèn)包含所有集合的_id字段上的索引,索引學(xué)會過濾掉A沟薄)
比如這樣過濾默認(rèn)的索引:
db.system.indexes.find({key:{$ne:{"_id":1}}})
或者這樣:
db.system.indexes.find({name:{$ne:"_id_"}})
6. 核心代碼如下(設(shè)置索引字段和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();
}
}