我一直在玩mongoDb来检查它的性能。我在Java中用一个小集合创建了一个小测试:
public class ClientWord {
@Id
private ObjectId id;
@Field(value="client_id")
private ObjectId clientId;
private String text;
private int value;
....
本文件有双重复合指数:
> db.client_words.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test1.client_words",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"client_id" : 1,
"text" : 1
},
"unique" : true,
"ns" : "test1.client_words",
"name" : "client_id_1_text_1"
}
]
我的测试插入了100.000个文档:
public void test(){
int size = 10;
List<ObjectId> clientIds = createClientIds(size);
t1 = t2 = t3 = new Date();
printWithTime("Inserting... ");
for (int i=0; i<10000; i++){
for (ObjectId id : clientIds){
mongoTemplate.upsert(
Query.query(Criteria.where("text").is("text"+i).and("client_id").is(id)),
Update.update("text","text"+i).set("client_id",id).inc("value", 3),
ClientWord.class);
}
if(i%100 == 0){
System.out.printf("\t%6d\t",i*size);
printWithTime("");
}
}
printWithTime("Total time: ");
System.out.println("Total elements in the ddbb: "+mongoTemplate.count(new Query(), ClientWord.class));
}
我已尝试使用普通和上限集合的此代码。正常需要超过10分钟并且上限为20秒。我还发现capped执行常量时间插入,而正常集合在集合增长时需要更长和更长时间,我想因为索引大小但两个集合都具有相同的索引...
任何人都可以解释为什么会有这么大的差异吗?提高正常收集性能的任何技巧?