2015-09-20 36 views
2

我想在Spring應用程序(無Spring數據)上實現Inserts/Second的高吞吐量。我嘗試插入萬份文件與下面的代碼:如何在Mongo Async Java Driver上實現多線程?

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"); 
} 

回答

1

這裏是直接的異步驅動程序使用 https://github.com/mongodb/mongo-java-driver/tree/master/driver-async 和API的例子並不顯得精緻......我認爲現在還沒有準備好爲止。 PS:vert.x有真正的異步蒙戈驅動程序(壓力測試過程中0%CPU)的作品好

更新

明年春發佈的數據都會有反應能力:ReactiveCrudRepository,ReactiveMongoTemplate,等等。卡桑德拉和雷迪斯也在支持名單。查找詳細信息here

+0

不要創建更多答案 - 將新信息編輯到當前答案中:「Spring正在採取被動方式,我們需要等待一段時間https://spring.io/blog/2016/ 28分之11/離去的反應性與 - 彈簧 - 數據」 –