V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Tornado Documentation
http://www.v2ex.com/tornado/
Tornado on GitHub
https://github.com/facebook/tornado/
Tornado Gists
http://tornadogists.org/
jecvay
V2EX  ›  Tornado

用 Tornado + Mongodb 开发要注意什么?

  •  1
     
  •   jecvay · 2015-01-20 13:35:00 +08:00 · 10374 次点击
    这是一个创建于 3577 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我没有开发网站的经验, 只是看过了Python和Tornado那本100多页的入门书.
    现在有个项目是做个管理系统网站, 打算用 Mongodb 数据库.
    而且我对异步什么的没有任何经验,

    请问有什么要注意的?

    16 条回复    2015-04-02 14:04:48 +08:00
    supersouth
        1
    supersouth  
       2015-01-20 13:52:42 +08:00
    1. Tornado的优势在于异步处理,高并发连接程序性能;所以你要写管理系统,推荐使用django,快而且文档全;
    2. Tornado和Mongodb一起用时,有个mongodb的python异步库可以用,用Tornado的ioloop实现的。请务必用这个库,否则达不到异步的效果。
    jecvay
        2
    jecvay  
    OP
       2015-01-20 13:58:45 +08:00
    @supersouth 谢谢!! 如果除了管理系统, 我要开发一个比赛功能, 我想写出比赛相关的各种API, 然后网站的功能都通过调用API来完成, 这个功能会很多人同时在线频繁点击, 那么Tornado是否有优势(API 以及 多人在线)?
    supersouth
        3
    supersouth  
       2015-01-20 14:01:24 +08:00
    @jecvay 对的,对于这种一起频繁交互的webapp,tornado比django要强很多。
    jecvay
        4
    jecvay  
    OP
       2015-01-20 14:03:31 +08:00
    fanta
        5
    fanta  
       2015-01-20 15:03:15 +08:00
    一楼已经说的很全了,补充点: 做长连接可以使用, 使用异步, 得习惯编程方式, 异步库(asyncmongo, motor)应该设置一个上限连接数.
    zhkzyth
        6
    zhkzyth  
       2015-01-20 15:19:39 +08:00
    之前做过一个tornado+motor的在线订单系统,lz也可以试试把这两个结合起来。

    管理功能部分可以用django或者flask来做,然后这个比赛的api就走tornado。不过这样会导致两个数据库,一个是mysql的,一个是mongodb...
    GeekGao
        7
    GeekGao  
       2015-01-20 15:25:58 +08:00
    数据量大时Mongodb 有瓶颈,建议先将数据插入队列,再异步写入
    dingyaguang117
        8
    dingyaguang117  
       2015-01-20 16:02:40 +08:00
    用gevent+ X框架 做长连接靠谱不?
    cevincheung
        9
    cevincheung  
       2015-01-20 16:03:14 +08:00
    换PostgreSQL :)
    9hills
        10
    9hills  
       2015-01-20 16:23:22 +08:00
    没写过异步程序,请不要用tornado。。。真的,坑太多
    我见过把Tornado写成同步的,qps只有16,你没看错,他起了16个进程。不忍直视
    fanta
        11
    fanta  
       2015-01-20 17:20:13 +08:00
    是的,tornado不适全做CPU密集的任务,I/O密集型推荐.
    mqingyn616
        12
    mqingyn616  
       2015-01-21 11:46:54 +08:00
    tornado的设计思路和django完全就是不一样的,如果用传统的web框架思维去使用tornado,你会觉得处处都是坑,你会吐槽,你会不理解为什么会这样。

    tornado在同步条件下依然可以工作的很好,关键看你怎么用,而且你使用tornado就意味着你需要更多的关注性能调优和其他东西,不仅仅是业务逻辑了,只会套逻辑写业务的rd,显然是不适合使用的。
    mqingyn616
        13
    mqingyn616  
       2015-01-21 12:00:09 +08:00
    多看tornado的源码,受益匪浅。特别是ioloop,gen和concurrent模块 。以及在新版本中,也支持使用线程池的方式模拟异步调用,这可以让你将传统的耗时同步代码异步化,当然这并不能提高并发能力,只能够解决系统阻塞问题。tornado的作者bdarnell 在新版本也注明了,tornado部分模块不再是线程安全的。
    Zuckonit
        14
    Zuckonit  
       2015-01-21 21:04:13 +08:00
    @fanta python不太适合CPU密集型
    veezzz
        15
    veezzz  
       2015-02-12 10:50:33 +08:00
    Tornado + Motor/MotorEngine
    需要看看怎么用tornado的gen简单的实现异步
    lucn
        16
    lucn  
       2015-04-02 14:04:48 +08:00
    @9hills 单个请求足够快,同步也没问题啊,10ms一个,单进程qps也100了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:47 · PVG 20:47 · LAX 04:47 · JFK 07:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.