我正在尝试在Spring应用程序上实现高吞吐量的Inserts / Second(没有Spring数据)。我尝试使用以下代码插入一百万个文档:
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"));
}
存储库代码如下:
@Bean
public MongoClient mongoClient() {
return MongoClients.create("mongodb://localhost");
}
我可以集合的最大写入次数约为4k /秒。有没有办法以多线程的方式做到这一点,以获得更高的每秒写入次数?
我对MongoClient的Spring bean配置是:
events.js:85
throw er; // Unhandled 'error' event
^
Error: accept EMFILE
at exports._errnoException (util.js:746:11)
at TCP.onconnection (net.js:1308:24)
答案 0 :(得分:1)
这是直接异步驱动程序使用的示例 https://github.com/mongodb/mongo-java-driver/tree/master/driver-async 并且api看起来并不好......我认为它到目前为止还没准备好。 PS:vert.x有真正的async mongo驱动程序,它运行良好(在压力测试期间0%cpu)
<强>更新强>
Next Spring Data release将具有反应功能:ReactiveCrudRepository,ReactiveMongoTemplate等。 Cassandra和Redis也在支持名单中。查找详细信息here
答案 1 :(得分:0)
我认为在尝试多线程之前,您可以检查MongoDB Java驱动程序(BulkWriteOperation类)中可用的MongoDB批量操作API(https://docs.mongodb.org/manual/core/bulk-write-operations/)。