集合和上限集合之间的mongodb更新/ upsert性能的差异

时间:2013-05-13 16:50:10

标签: java performance mongodb

我一直在玩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执行常量时间插入,而正常集合在集合增长时需要更长和更长时间,我想因为索引大小但两个集合都具有相同的索引...

任何人都可以解释为什么会有这么大的差异吗?提高正常收集性能的任何技巧?

0 个答案:

没有答案