1
shiny 2013-10-15 21:49:28 +08:00 1
如果用 MongoDB,推荐motor,是一个异步的 mongodb 驱动,文档也比较齐全 http://motor.readthedocs.org/en/latest/differences.html
其他对应的异步驱动这里都有写:https://github.com/facebook/tornado/wiki/Links 但是大多数都看上去没经过大量考验,起码没多少人用。 |
3
ctrlaltdeletel 2013-10-15 21:57:53 +08:00
|
4
Muninn 2013-10-15 21:58:18 +08:00
postgres的叫momoko 但是。。。略微简陋 不过作者一直在完善
|
5
vfasky 2013-10-16 09:31:42 +08:00
如果是orm, 可以看下这个 https://vfasky.com/2013-05-28/momoko-peewee-orm-mopee/
|
6
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还可以充当一个数据库操作队列的作用. 奇思妙想, 还没有经过实践 |
7
zenliver 2013-10-16 12:14:13 +08:00
@kernel1983 如果有大量的阻塞任务, 后面那个tornado也会被阻塞, 然后就呵呵了, 最好就是异步io的方式,如果不能实现, 就扔到线程池做异步吧, 比如future.executor
|