开发者社区> 问答> 正文

tornado的mongo驱动是什么

背景
我用apache的ab test在公司的两台虚拟机上面测试,发现用pymongo的速度最快,asyncmongo其次,最后才是motor库.
硬件配置;
•server端
◦ubuntu 12.04
◦Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz
◦內存 500M
◦基本的server配置全部打开 ˜(比如maxsoconn设到很大)
•client端
◦freebsd(机子在公司,暂时空缺=.=)
测试工具:
ab test
测试用例
我这里只贴了asyncmongo的用例,其他两个的代码结构类似,但跟其他业务结合得比较紧,所以就不贴了.大概的用例描述:客户端发起一个json格式的post请求,tornado这边根据player_id跟mongo要数据,只是读请求,不存在锁的问题.
删了一些敏感的信息.
screenshot
screenshot
screenshot
screenshot
测试结果
•同步mongo库
screenshot
screenshot
•异步mongo库
screenshot
screenshot
screenshot
结果分析

理论上来说异步的mongo应该可以处理更多的并发连接,但实际测试来看,并发连接数相差不大.我想到的原因:

  • 测试机子太挫
  • 测试的数据量不够大,如果增大返回的数据大小,或者延长查询的时间,这样理论上motor性能会更好看点
  • 我查看了mongod的日志,发现异步的驱动,每次都会跟mongo新生成一个连接,频繁的连接建立与删除,造成了性能上的损耗?而pymongo则从头到尾都是一个连接.

展开
收起
蛮大人123 2016-02-14 11:47:17 3081 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    个人感觉损耗在建立连接上了。
    pymongo也存在pool,只是你的测试可能只建立一个连接,可以看看max_pool_size这个参数
    asyncmongo会在开始时创建链接池,可以参考:asyncmongo / asyncmongo / pool.py (我没怎么仔细看)。
    需要注意的是,asyncmongo会在超过最大连接数时报错,motor印象中会阻塞,掉过这个坑里。
    如果你的mongodb数据够多,每次读取的数据不同,每个数据大点的话,性能应该会体现出来。
    个人想法,可以做更多测试看看。

    2019-07-17 18:42:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载