MongoDB Index using when use sorting in the stress testing.

public static void main(String[] args){

try{

Mongo client = new MongoClient("localhost");

new MongoTemplate(client, "testdb", null);

// mongod --auth [ for security reason ]

UserCredentials credential = new UserCredentials("admin", "admin");

MongoTemplate templateAuth = new MongoTemplate(client, "testdb", credential);

boolean done = false;

long startmi = 0;

long endmi = 0;

String tableName = "";

int total = 100*100*10; // one company, all staff 1000, 10 questions/person

int skipcount = total - 10000;

// MongoTemplate templateNormal = new MongoTemplate(client, "testdb");

// 2000 companies, 100 staff, 10 questions/person / one collection

if(!done){

for(int c=1;c<10;c++){

tableName = "AsxQuestionWBCOf"+c;

BasicDBObject document = null;

startmi = System.currentTimeMillis();

//System.out.println("-------------insert start time:"+startmi);

for(int i=0; i<total; i++){

document = new BasicDBObject();

document.put("name", "staff name: staff"+i);

document.put("question", "staff's question number:"+i);

document.put("vac", "vac state:"+i);

document.put("status", "1");

document.put("number", i);

document.put("date", new Date());

templateAuth.getCollection(tableName).insert(document);

templateAuth.indexOps(tableName).ensureIndex(new Index().on("date",Order.ASCENDING));

}

endmi = System.currentTimeMillis();

//System.out.println("-------------insert end   time:"+endmi);

System.out.println("\n\n-------------insert total count:"+total); 

System.out.println("-------------insert total seconds used:"+ (endmi - startmi)/1000);

startmi = System.currentTimeMillis();

//System.out.println("\n\n-------------cursor query start time:"+startmi);

//templateAuth.getCollection(tableName).find(ref, keys)

BasicDBObject querydb = new BasicDBObject();

querydb.put("status", "1");

//querydb.put("name", new BasicDBObject("$regex", "staff.*").append("$options", "i"));

BasicDBObject orderBy = new BasicDBObject();

orderBy.put("date", -1);

DBCursor cursor = templateAuth.getCollection(tableName).find(querydb).skip(skipcount).sort(orderBy).limit(20);

if(cursor != null && cursor.hasNext()){

System.out.println("\n\n-------------cursor.count():"+cursor.count());

while(cursor.hasNext()){

System.out.println("-------------first:"+cursor.next().get("name"));

}

}

cursor.close();

endmi = System.currentTimeMillis();

//System.out.println("-------------cursor query end time:"+endmi);

System.out.println("-------------cursor query total seconds used:"+ (endmi - startmi)/1000);


}

tableName = "AsxQuestionWBCOf"+0;

templateAuth.indexOps(tableName).ensureIndex(new Index().on("date",Order.ASCENDING));

startmi = System.currentTimeMillis();

//System.out.println("\n\n-------------list query start time:"+startmi);

Query query = new Query();

query.addCriteria(Criteria.where("status").is("1"));

query.addCriteria(Criteria.where("name").regex("staff.*","i"));

query.with(new Sort(Sort.Direction.DESC, "date"));

query.skip(skipcount);

query.limit(20);

List<BasicDBObject> retList = templateAuth.find(query, BasicDBObject.class, tableName);

endmi = System.currentTimeMillis();

//System.out.println("-------------list query end   time:"+endmi);

System.out.println("\n\n-------------list query total seconds used:"+ (endmi - startmi)/1000);

if(retList != null){

System.out.println("-------------retList.size():"+retList.size());

for(BasicDBObject obj : retList){

System.out.println("-------------obj.name:"+obj.getString("name"));

}

}

}

}catch(Exception ex){

ex.printStackTrace();

}

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值