【问题标题】:How to achieve multithreading on Mongo Async Java Driver?如何在 Mongo Async Java Driver 上实现多线程?
【发布时间】:2015-09-20 11:14:42
【问题描述】:

我正在尝试在 Spring 应用程序(没有 Spring 数据)上实现高插入/秒吞吐量。我尝试使用以下代码插入一百万个文档:

Address address = new Address();
address.setStreet1("");
address.setStreet2("");
address.setZipCode("");
address.setId(1234);
StopWatch stopWatch = new StopWatch();
stopWatch.start();
IntStream.iterate(0, i -> i++).limit(1000000).parallel().
          forEach(i -> addressRepository.insert(address);
stopWatch.stop();

以及仓库代码如下:

public void insert(Address address) {
       Document address = new Document("_id", address.getId()).
                         append("zip_code", address.getZipCode).
                         append("street_1", address.getStreet1()).
                         append("street_2", address.getStreet2());

      db.getCollection("address").insertOne(address, (Void result, Throwable t)
                                      -> System.out.println("Inserted"));
}

我可以收集的最大写入次数约为 4k/秒。有没有办法以多线程的方式做到这一点,以获得更高的每秒写入量?

我的 MongoClient 的 Spring bean 配置是:

 @Bean
 public MongoClient mongoClient() {
        return MongoClients.create("mongodb://localhost");
 }

【问题讨论】:

    标签: java multithreading spring performance mongodb


    【解决方案1】:

    这是直接使用异步驱动程序的示例 https://github.com/mongodb/mongo-java-driver/tree/master/driver-async 并且 api 看起来不太好......我认为它到目前为止还没有准备好。 PS:vert.x 有真正的 async mongo 驱动,运行良好(压力测试时为 0% cpu)

    更新

    下一个 Spring Data 版本将具有响应式功能:ReactiveCrudRepository、ReactiveMongoTemplate 等。 Cassandra 和 Redis 也在支持列表中。查找详情here

    【讨论】:

    【解决方案2】:

    我认为在尝试多线程之前,您可以检查 MongoDB Java 驱动程序(BulkWriteOperation 类)中提供的 MongoDB 批量操作 API (https://docs.mongodb.org/manual/core/bulk-write-operations/)。

    检查:http://mongodb.github.io/mongo-java-driver/2.13/getting-started/quick-tour/#bulk-operations:b8bcd3c4cba9ac16433f82561ee44461

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2019-10-31
      • 2018-10-06
      相关资源
      最近更新 更多