V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xiaolee59
V2EX  ›  Python

异步 MongoDB 连接库 Motor 的实现原理分析

  •  
  •   xiaolee59 ·
    cyrusin · 2016-06-08 11:32:30 +08:00 · 3945 次点击
    这是一个创建于 3091 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有用 Motor 的同学可以看下我对 Motor 实现原理的分析,欢迎拍砖,交流下,大家共同学习,作者的实现还是很巧妙的,而且该作者之前就是 MongoDB 的工程师, PyCon2016 也有他的分享,还和 Guido 一起写过东西,做的东西都还是很靠谱的。
    https://cyrusin.github.io/2016/06/06/motor20160606/
    3 条回复    2016-06-08 16:56:01 +08:00
    sujin190
        1
    sujin190  
       2016-06-08 12:57:36 +08:00
    当时看源代码的时候确实发现很不错,自己用相同的方式实现了一个 mysql 的
    https://github.com/snower/TorMySQL
    不过貌似 tornado 的 iostream 的读写性能其实很低,对于 mongodb 和 mysql 这种网络读写过程相对稳定的协议来说实在太慢了,我自定义实现 iostream ,简化读写过程之后,性能提升相当明显, pypy 上更快,现在两个都用在生产环境,单机数千并发妥妥的,可惜就是数据库有点扛不住。。
    xiaolee59
        2
    xiaolee59  
    OP
       2016-06-08 15:05:03 +08:00
    @sujin190 会好好拜读下你的项目,试用了下,发现确实不错。
    我们在 Tornado 中使用异步非阻塞的数据库驱动并非为了能达到多高并发性能,主要是当 DB 团队不是很靠谱的时候,不想让数据库 IO 成为瓶颈,单线程的服务最好不要有任何阻塞等待的情况。 Tornado 作者的博客里针对数据库这块儿也是建议让数据库足够快,如果数据库本身很慢,即使使用异步,也不会带来多高的平均读写性能。
    sujin190
        3
    sujin190  
       2016-06-08 16:56:01 +08:00   ❤️ 1
    @xiaolee59 其实理想状况来说,确实使用异步增加了开销,但好处确实有着极强的适应力,大多数情况不会出现所有请求无法处理的情况,我们在使用中也遇到了很多坑,也是通过各种坑不断求其进行调整,最终现在终于很好用了,调试的时候确实很纠结,现在调好了确实很好用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2734 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:05 · PVG 15:05 · LAX 23:05 · JFK 02:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.