MongoDB Java驱动程序同步&异步

时间:2016-07-11 09:41:01

标签: java macos mongodb vert.x wiredtiger

我目前正在使用Vert.x在我的应用程序上执行一些基准测试,我正在尝试比较使用mongo java同步或异步驱动程序时的结果。

令我惊讶的是,使用同步驱动程序的结果似乎要好得多,因为与异步驱动程序相比,它使用了很少的mongodb连接。因此,mongo请求速度较慢,mongo总是通过异步驱动程序崩溃来完成。

与同步驱动程序相比,异步驱动程序打开这么多连接是否正常?如果是,我们是否需要安装mongo作为副本集以更好地扩展异步驱动程序?

例如,以下是使用wrk进行测试的结果,在30秒内使用16个线程进行200次连接。

使用同步驱动程序:

~ • wrk -t16 -c200 -d30s http://localhost:8080/f0e7a0f5/status
    Running 30s test @ http://localhost:8080/f0e7a0f5/status
    16 threads and 200 connections
    Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   131.90ms   42.75ms 567.64ms   78.19%
    Req/Sec    92.61     21.28   171.00     66.36%
    43997 requests in 30.10s, 3.23MB read
    Socket errors: connect 0, read 55, write 0, timeout 0
    Requests/sec:   1461.89
    Transfer/sec:    109.93KB

使用异步驱动程序(mongodb崩溃):

~ • wrk -t16 -c200 -d30s http://localhost:8080/f0e7a0f5/status
    Running 30s test @ http://localhost:8080/f0e7a0f5/status
    16 threads and 200 connections
    Thread Stats   Avg      Stdev     Max   +/- Stdev
     Latency   424.87ms  205.89ms   1.38s    73.84%
     Req/Sec    31.68     20.04   118.00     64.01%
    13597 requests in 30.11s, 1.00MB read
    Socket errors: connect 0, read 31, write 0, timeout 0
    Requests/sec:    451.65
    Transfer/sec:     33.96KB
  • MongoDB 3.2.7 WiredTiger
  • Mongo Java Driver 3.2.2
  • Vertx 3.3.1
  • Mac OS X El Capitan 2.5 Ghz I7 16 Go RAM

更新1 :我通过配置文件和进程限制解决了本地计算机上的mongodb崩溃问题:https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks 但是,我仍然有很多与异步驱动程序打开的连接,这会减慢我的应用程序。

更新2 :以下是使用异步驱动程序的一些代码。 垂直:http://pastebin.com/SygKuDhg

配置:

"mongo-platform" : {
        "pool_name": "mongo-platform",
        "host": "localhost",
        "port": 27017,
        "db_name": "mongo_platform",
        "maxPoolSize": 250,
        "minPoolSize": 20,
        "useObjectId": true
    }

更新3 :以下是同步驱动程序的代码

http://pastebin.com/FJ7JeSPU

我使用Jongo作为java同步驱动程序的包装器,使用vertx-hk2将依赖注入到我的REST Verticle中。

0 个答案:

没有答案