tornado数据库操作怎么异步

2013-10-15 21:43:35 +08:00
 cctvsmg
tornado作为一个web server性能很好
但是真正费时的地方是IO啊

求推荐各种异步驱动
mysql mongodb postgresql都可以
9793 次点击
所在节点    Python
7 条回复
shiny
2013-10-15 21:49:28 +08:00
如果用 MongoDB,推荐motor,是一个异步的 mongodb 驱动,文档也比较齐全 http://motor.readthedocs.org/en/latest/differences.html

其他对应的异步驱动这里都有写:https://github.com/facebook/tornado/wiki/Links
但是大多数都看上去没经过大量考验,起码没多少人用。
cctvsmg
2013-10-15 21:51:22 +08:00
@shiny 好顶赞!
ctrlaltdeletel
2013-10-15 21:57:53 +08:00
Muninn
2013-10-15 21:58:18 +08:00
postgres的叫momoko 但是。。。略微简陋 不过作者一直在完善
vfasky
2013-10-16 09:31:42 +08:00
kernel1983
2013-10-16 11:57:10 +08:00
一直以来的观点是, 如果数据库(本地或者在局域网内)的操作时间过长, 那么需要优化的是数据库, 以及联合查询, 另外该用NoSQL的用NoSQL, 该做cache的做cache ...


刚刚想到一个方法, 用tornado毕竟是可以做异步request的, 如果你的数据库真的很慢, 不如再开其他的tornado做block数据库操作(你可以用tornado wsgi多线程/多进程形式部署, 也可以用django, flask等), 然后通过API的形式将数据库返回过来. 相当于用tornado给你的数据库操作web化(写内部数据API)

这个是我刚才刚刚想到的, 原理就是用一些独立的进程去做费时的数据库操作, 这样你的主web tornado进程就可以异步畅通, 增加吞吐量. 这样就不需要为各个数据库写驱动了.

如果数据库在不同的机器上, 那么可以考虑将这些独立的数据操作tornado进程在数据库机器上部署. 使用wsgi多线程/多进程的好处是查询可以同时进行, 当然也可能卡死数据库. 使用tornado自己的单进程异步部署的时候, tornado还可以充当一个数据库操作队列的作用.

奇思妙想, 还没有经过实践
zenliver
2013-10-16 12:14:13 +08:00
@kernel1983 如果有大量的阻塞任务, 后面那个tornado也会被阻塞, 然后就呵呵了, 最好就是异步io的方式,如果不能实现, 就扔到线程池做异步吧, 比如future.executor

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

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

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

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

© 2021 V2EX