我使用Spring框架工作在jave中配置mongoDB。但是当我保存对象时,我发现它的性能非常低。插入200条记录需要大约7000毫秒。
然而,当我使用pymongo进行相同的插入操作时,速度非常快,大约50毫秒。
只插入这样的200个单独对象需要7秒才有问题吗?
mongodb的版本是2.4.1,这个性能测试是在fedora13,ubuntu 12.4和win8上进行的。
有人可以告诉我为什么并帮助我解决问题吗?
代码如下:
以下代码需要超过7000毫秒:
MongoTemplate mongoTemplate = (MongoTemplate)SpringFactory.getFactory().getBean("mongoTemplate");
for (int i = 0; i <200; i++) {
Person person = new Person;
person.setName("test" + i);
person.setAge(1234665 + i);
mongoTemplate.insert(ncbiid);
}
以下Python代码只需要50ms:
connection = Connection('127.0.0.1', 27017)
db = connection['test']
def insert(num):
posts = db.person
for x in range(200):
post = {"_id" : str(x),
"name": str(x)+"Mike",
"age": x}
posts.insert(post)
这是Person Class:
@Document(collection="person")
public class Person {
@Indexed
String name;
int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
这是Spring xml文件的mongodb部分:
<mongo:mongo id="mongo" replica-set="127.0.0.1:27017">
<mongo:options
connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="1000"
max-wait-time="1500"
auto-connect-retry="true"
socket-keep-alive="true"
socket-timeout="1500"
slave-ok="true"
write-number="1"
write-timeout="0"
write-fsync="true"/>
</mongo:mongo>
<mongo:db-factory dbname="test" mongo-ref="mongo"/>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>
<mongo:mapping-converter base-package="com.database.model" />
<mongo:repositories base-package="com.database.mongorepo"/>
答案 0 :(得分:2)
mongoOps.insert(ncbiid);
这样做200次是200次单独插入。
mongoTemplate.insert(lsPersons, "person");
曾经是200个记录的一次批量插入。
如果批量处理,则意味着减少到数据库的往返次数和更好的性能。
This is the java doc for MongoTemplate,它告诉您一个是批处理操作。