所以情况就是这样:我有一个程序,它接受两个大的csv文件,找到差异,然后将一个数组列表发送到一个方法,该方法应该用数组中的行更新mongodb。问题是更新正在进行中。具有5000次更新的测试用例需要36分钟。这是正常的吗?
update(List<String> changes)
- 方法如下:
mongoClient = new MongoClient(ip);
db = mongoClient.getDB("foo");
collection = db.getCollection("bar");
//for each line of change
for (String s : changes) {
//splits the csv-lines on ;
String[] fields = s.split(";");
//identifies wich document in the database to be updated
long id = Long.parseLong(fields[0]);
BasicDBObject sq = new BasicDBObject().append("organizationNumber",id);
//creates a new unit-object, that is converted to JSON and then inserted into the database.
Unit u = new Unit(fields);
Gson gson = new Gson();
String jsonObj = gson.toJson(u);
DBObject objectToUpdate = collection.findOne(sq);
DBObject newObject = (DBObject) JSON.parse(jsonObj);
if(objectToUpdate != null){
objectToUpdate.putAll(newObject);
collection.save(objectToUpdate);
}
答案 0 :(得分:1)
那是因为您正在采取额外步骤进行更新。 您不需要手动解析JSON,只需在一个步骤中使用“where”子句进行更新,就不必执行query-then-update。
这样的事情:
BasicDBObject query= new BasicDBObject().append("organizationNumber",id);
Unit unit = new Unit(fields);
BasicDBObject unitDB= new BasicDBObject().append("someField",unit.getSomeField()).append("otherField",unit.getOtherField());
collection.update(query,unitDB);
query
指定“where”子句,unitDB
指定需要更新的字段。