用 Tornado + Mongodb 开发要注意什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jecvay
V2EX    Tornado

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

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

    我没有开发网站的经验, 只是看过了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...
    R4rvZ6agNVWr56V0
        7
    R4rvZ6agNVWr56V0  
       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     Solana     846 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:22 PVG 06:22 LAX 14:22 JFK 17:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86