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