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

2016-06-08 11:32:30 +08:00
 xiaolee59
有用 Motor 的同学可以看下我对 Motor 实现原理的分析,欢迎拍砖,交流下,大家共同学习,作者的实现还是很巧妙的,而且该作者之前就是 MongoDB 的工程师, PyCon2016 也有他的分享,还和 Guido 一起写过东西,做的东西都还是很靠谱的。
https://cyrusin.github.io/2016/06/06/motor20160606/
3807 次点击
所在节点    Python
3 条回复
sujin190
2016-06-08 12:57:36 +08:00
当时看源代码的时候确实发现很不错,自己用相同的方式实现了一个 mysql 的
https://github.com/snower/TorMySQL
不过貌似 tornado 的 iostream 的读写性能其实很低,对于 mongodb 和 mysql 这种网络读写过程相对稳定的协议来说实在太慢了,我自定义实现 iostream ,简化读写过程之后,性能提升相当明显, pypy 上更快,现在两个都用在生产环境,单机数千并发妥妥的,可惜就是数据库有点扛不住。。
xiaolee59
2016-06-08 15:05:03 +08:00
@sujin190 会好好拜读下你的项目,试用了下,发现确实不错。
我们在 Tornado 中使用异步非阻塞的数据库驱动并非为了能达到多高并发性能,主要是当 DB 团队不是很靠谱的时候,不想让数据库 IO 成为瓶颈,单线程的服务最好不要有任何阻塞等待的情况。 Tornado 作者的博客里针对数据库这块儿也是建议让数据库足够快,如果数据库本身很慢,即使使用异步,也不会带来多高的平均读写性能。
sujin190
2016-06-08 16:56:01 +08:00
@xiaolee59 其实理想状况来说,确实使用异步增加了开销,但好处确实有着极强的适应力,大多数情况不会出现所有请求无法处理的情况,我们在使用中也遇到了很多坑,也是通过各种坑不断求其进行调整,最终现在终于很好用了,调试的时候确实很纠结,现在调好了确实很好用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/284337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX