数据库连接池对象在何时创建比较好 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
RadAsm
V2EX    Python

数据库连接池对象在何时创建比较好

  •  
  •   RadAsm 2015-11-04 09:52:49 +08:00 4414 次点击
    这是一个创建于 3634 天前的主题,其中的信息可能已经有所发展或是发生改变。
    rt ,是在服务器启动进行初始化( init )的时候,还是等到有用户( User )需要使用到数据库的时候,进行创建呢?

    感觉一开始就可以了,但是又担心连接池对象占用资源。嗯。。。
    11 条回复    2015-11-05 10:44:41 +08:00
    north521
        1
    north521  
       2015-11-04 09:56:01 +08:00
    参照 spring 等框架,一般是初始化的时候,就建立的
    hyy
        2
    hyy  
       2015-11-04 09:56:38 +08:00
    我觉得用的时候再建比较好,不然耽误服务器启动时间,毕竟服务器启动后,可以马上服务其他不需要连接数据库的功能。
    ryanking8215
        3
    ryanking8215  
       2015-11-04 10:30:27 +08:00
    @hyy 创建快的话,也不会耽误多少服务器启动时间; 创建慢的话,到用的时候不就响应慢了。所以无论快慢在服务器起来的时候就创建啊。数据库对象池创建很慢吗?!
    awanabe
        4
    awanabe  
       2015-11-04 10:31:5 +08:00
    启动服务的时候.
    理由如下:
    1. 如何判断 用户第一次使用到数据库?
    2. 第一次使用初始化时间消耗.
    3. 启动服务没有启用数据库连接池, 如何判断连接池可以正常启用? 等到需要的时候发现不能启用, 那就哭.
    4. 连接池都说了是池了... 目的就是用于不过度重建+释放资源, 有效利用资源. 这种 pool 不都应该提前应用准备好么...
    Kisesy
        5
    Kisesy  
       2015-11-04 13:21:19 +08:00
    你卖东西的时候,是先摆好商品还是等顾客来时再摆呢?
    yuezhimsolo
        6
    yuezhimsolo  
       2015-11-04 13:46:53 +08:00
    预热
    beneo
        7
    beneo  
       2015-11-04 14:16:41 +08:00
    启动的时候难道不检查一下数据库到底能不能连得上么,呵呵
    iyaozhen
        8
    iyaozhen  
       2015-11-04 14:40:53 +08:00
    @Kisesy 我觉得楼主的意思是,并不知道这次请求会不会用上数据库,想等需要用的时候在连接。

    不过个人建议 init 的时候就连接吧,所有的初始操作都放进去,有利于 cache ,也方便别的阅读代码。万一连接方法有个啥调整,也好调整。
    jhdxr
        9
    jhdxr  
       2015-11-04 18:46:52 +08:00
    这个问题得分语言讨论。。。比如 java 之类的,那毫无疑问是启动时建好;而对于 php (每次请求会完整的走一遍创建到销毁这种生命周期的),楼主这问题才有讨论的价值,因为有可能有些请求我根本不涉及到数据库,那在创建时候建立就浪费了。。。
    haozhang
        10
    haozhang  
       2015-11-04 20:37:22 +08:00
    像池这类东西都应该是全局的啊...所以都应该在程序刚刚加载的时候创建,程序结束的时候销毁。是看程序的生命周期...
    xiaolee59
        11
    xiaolee59  
       2015-11-05 10:44:41 +08:00
    连接池的话一般是程序启动的时候就开出来。
    但如果是全局的单个连接的对象的话,其实就没必要占用程序启动的时间,在代码里按需启动即可,由第一个需要数据库连接的来初始化,然后大家共享就行。
    要考虑下你们的实际服务部署方式,想象一下一台物理机上开多个服务器进程的时候,假如太多东西都在程序初始化的时候启动的话,你的服务得多长时间才能启动完毕?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5237 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:21 PVG 15:21 LAX 00:21 JFK 03:21
    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