1

MongoDb 2.4.7

mongo-java-driver-2.11.2.jar

Windows 7的

所以我试图通过插入一批插入来加载测试 mongodb 来判断它可以处理多少吞吐量。如果一次插入一个它可以工作:

...

MongoClient conn = new MongoClient("localhost", 27017);
DB db = conn.getDB( "myDb" );

BasicDBObject jobRecord = new BasicDBObject(...);

DBCollection coll = db.getCollection("myTable");

BasicDBObject finalJobRecord;

for(int i=0;i<100;i++)
{
    finalJobRecord = jobRecord;
    finalJobRecord = finalJobRecord.append("recnum",String.valueOf(i));
    coll.insert(finalJobRecord); 
    finalJobRecord.removeField("_id");// wont work without because of duplicate key errors
}
conn.close();

现在,如果我将其更改为批处理它不起作用(重复键异常触发):

...

MongoClient conn = new MongoClient("localhost", 27017);
DB db = conn.getDB( "myDb" );

BasicDBObject jobRecord = new BasicDBObject(...);

DBCollection coll = db.getCollection("myTable");

BasicDBObject finalJobRecord;

List<DBObject> basicDBObjects = new LinkedList<>();

for(int i=0;i<100;i++)
{
    finalJobRecord = jobRecord;
    finalJobRecord = finalJobRecord.append("recnum",String.valueOf(i));
    basicDBObjects.add(finalJobRecord);
}
coll.insert(basicDBObjects);
conn.close();
4

1 回答 1

0

您最终将得到具有 {"recnum" : 99} 的相同对象列表(所有列表条目都将引用相同的对象),这似乎不是您打算做的。您需要在每次 for 循环迭代中创建新的 BasicDBObject,否则您将在每次迭代中修改相同的 jobRecord。

这同样适用于一对一的方法:您正在观察不同的“recnum”字段,因为该对象在修改之前已经插入到 Mongo 中。

于 2013-11-13T21:51:59.023 回答