【发布时间】:2013-11-13 21:00:22
【问题描述】:
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();
【问题讨论】:
-
new BasicDBObject(...) 只是字段和值的文档。没错,它应该自动生成_id。我认为它所做的是生成第一个,然后将该 _id 复制到要插入到批处理中的下一个文档。第一个插入有效,批处理中的第二个抛出异常
标签: java mongodb batch-insert