我将 mongodb 用于我们的 Application 。
我们对 mongodb 的使用率很高,看到这个 mongostat 输出你就会知道
insert/s query/s update/s delete/s getmore/s command/s flushes/s mapped vsize res faults/s locked % idx miss % q t|r|w conn time
0 4 1 0 0 3 1 10396 11347 591 0 0.1 0 0|0|0 70 10:57:28
0 65 31 0 0 35 0 10396 11347 591 1 3.7 0 0|0|0 70 10:57:29
0 76 37 0 0 41 0 10396 11347 591 0 3.5 0 0|0|0 70 10:57:30
0 85 42 0 0 44 0 10396 11347 591 1 4.7 0 0|0|0 70 10:57:33
0 52 25 0 0 29 0 10396 11347 591 0 2.9 0 0|0|0 70 10:57:34
0 26 11 0 0 15 0 10396 11347 591 0 1.1 0 0|0|0 70 10:57:36
0 83 41 0 0 43 0 10396 11347 591 1 4.6 0 0|0|0 69 10:57:37
关于我的查询,
根据我们的应用程序,当用户登录应用程序时,我需要存储用户持有的任何符号。(用户可能包含 20 到 100 范围内的符号)
实现上述插入操作的最佳方法是什么
1. Perform a insert operation for each symbol individually
Or
2. Insert all the symbols at once this way
public void insert(ArrayList<QuoteReportBean> quotelist) {
DBObject[] totalrecords = new BasicDBObject[quotelist.size()];
for (int i = 0; i < quotelist.size(); i++) {
QuoteReportBean reportbean = quotelist.get(i);
BasicDBObject dbrecord = new BasicDBObject();
dbrecord.append("cust", reportbean.getCustomerId());
dbrecord.append("symbol", reportbean.getUniqueSymbol());
dbrecord.append("access_time", reportbean.getDate());
totalrecords[i] = dbrecord;
}
WriteResult result = coll.insert(totalrecords,WriteConcern.NORMAL);
logger.info("quotelist" + result.toString());
}
我担心的是,当我将分析级别设置为 50
db.setProfilingLevel(1,50)
并且第二种方式的插入查询已经记录在system.profile集合中
您能否告诉我插入操作是否会锁定其他读/写操作?