终于写完了定时器自动创建mongo集合的索引!

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

}

}

你可能感兴趣的:(终于写完了定时器自动创建mongo集合的索引!)