Spring Data MongoDB-更新需要几秒钟才能完成?

Spring Data MongoDB-更新需要几秒钟才能完成?,mongodb,spring-data-mongodb,Mongodb,Spring Data Mongodb,我正在使用SpringDataMongoDB与我的mongodb设置交互。我正在测试不同的写关注点,并注意到对于未确认的写关注点,更新1000个文档的时间大约为5-6秒,即使未确认的写关注点并不等待任何确认。 我用原始java驱动程序测试了同样的程序,时间大约为40毫秒 是什么导致了原始java驱动程序和spring数据mongodb更新之间的巨大时间差 注意,我使用的是未确认的写关注点和mongodb v2.6.1以及默认配置 添加用于比较的代码:- 原始Java驱动程序代码:-

我正在使用SpringDataMongoDB与我的mongodb设置交互。我正在测试不同的写关注点,并注意到对于未确认的写关注点,更新1000个文档的时间大约为5-6秒,即使未确认的写关注点并不等待任何确认。 我用原始java驱动程序测试了同样的程序,时间大约为40毫秒

是什么导致了原始java驱动程序和spring数据mongodb更新之间的巨大时间差

注意,我使用的是未确认的写关注点和mongodb v2.6.1以及默认配置

添加用于比较的代码:-

原始Java驱动程序代码:-

        MongoClient mongoClient = new MongoClient("localhost", 27017);
        DB db = mongoClient.getDB( "testdb" );

        DBCollection collection = db.getCollection("product");
        WriteResult wr = null;
        try {
            long start = System.currentTimeMillis();
            wr = collection.update(
                    new BasicDBObject("productId", new BasicDBObject("$gte", 10000000)
                                                       .append("$lt", 10001000)),
                    new BasicDBObject("$inc", new BasicDBObject("price", 100)),
                    false, true, WriteConcern.UNACKNOWLEDGED);
            long end = System.currentTimeMillis();

            System.out.println(wr + "  Time taken: " + (end - start) + " ms.");
        }
弹簧代码:- Config.xml

<mongo:mongo host="localhost" port="27017" />

<mongo:db-factory dbname="testdb" mongo-ref="mongo" />

<bean id="Unacknowledged" class="com.mongodb.WriteConcern">
    <constructor-arg name="w" type="int" value="0"/>
</bean>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <property name="writeConcern" ref="Unacknowledged"/>
</bean>
注册代码:-

    ProductDAOImpl productDAO = new ProductDAOImpl();

    productDAO.setMongoTemplate(mongoTemplate);

    long start = System.currentTimeMillis();
    productDAO.update(10000000, 10001000, 100);
    long end = System.currentTimeMillis();

    System.out.println("Time taken = " + (end - start) + " ms.");
模式:-

   {
       "_id" : ObjectId("53b64d000cf273a0d95a1a3d"),
       "_class" : "springmongo.domain.Product",
       "productId" : NumberLong(6),
       "productName" : "product6",
       "manufacturer" : "company30605739",
       "supplier" : "supplier605739",
       "category" : "category30605739",
       "mfgDate" : ISODate("1968-04-26T05:00:00.881Z"),
       "price" : 665689.7224373372,
       "tags" : [
              "tag82",
              "tag61",
              "tag17"
       ],
       "reviews" : [
              {
                     "name" : "name528965",
                     "rating" : 6.5
              },
              {
                     "name" : "name818975",
                     "rating" : 7.5
              },
              {
                     "name" : "name436239",
                     "rating" : 3.9
              }
       ],
       "manufacturerAdd" : {
              "state" : "state55",
              "country" : "country155",
              "zipcode" : 718
       },
       "supplierAdd" : {
              "state" : "state69",
              "country" : "country69",
              "zipcode" : 691986
       }
   }

希望有帮助。

您确定您正在测试完全相同的场景吗?没有更多关于你到底在做什么的细节,很难判断。是的,我保持一切不变。问题是,这只会在更新时发生。使用insert或remove,我看不出有什么明显的区别。如果您愿意共享您的架构、示例文档和用于测试的代码,人们会更容易帮助您。正如我对未确认的写入问题所理解的那样,驱动程序应该只在套接字上编写更新查询并返回。它不等待来自服务器的任何确认。spring是否可能在内部等待确认?
   {
       "_id" : ObjectId("53b64d000cf273a0d95a1a3d"),
       "_class" : "springmongo.domain.Product",
       "productId" : NumberLong(6),
       "productName" : "product6",
       "manufacturer" : "company30605739",
       "supplier" : "supplier605739",
       "category" : "category30605739",
       "mfgDate" : ISODate("1968-04-26T05:00:00.881Z"),
       "price" : 665689.7224373372,
       "tags" : [
              "tag82",
              "tag61",
              "tag17"
       ],
       "reviews" : [
              {
                     "name" : "name528965",
                     "rating" : 6.5
              },
              {
                     "name" : "name818975",
                     "rating" : 7.5
              },
              {
                     "name" : "name436239",
                     "rating" : 3.9
              }
       ],
       "manufacturerAdd" : {
              "state" : "state55",
              "country" : "country155",
              "zipcode" : 718
       },
       "supplierAdd" : {
              "state" : "state69",
              "country" : "country69",
              "zipcode" : 691986
       }
   }