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

2015-11-04 09:52:49 +08:00
 RadAsm
rt ,是在服务器启动进行初始化( init )的时候,还是等到有用户( User )需要使用到数据库的时候,进行创建呢?

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

不过个人建议 init 的时候就连接吧,所有的初始操作都放进去,有利于 cache ,也方便别的阅读代码。万一连接方法有个啥调整,也好调整。
jhdxr
2015-11-04 18:46:52 +08:00
这个问题得分语言讨论。。。比如 java 之类的,那毫无疑问是启动时建好;而对于 php (每次请求会完整的走一遍创建到销毁这种生命周期的),楼主这问题才有讨论的价值,因为有可能有些请求我根本不涉及到数据库,那在创建时候建立就浪费了。。。
haozhang
2015-11-04 20:37:22 +08:00
像池这类东西都应该是全局的啊...所以都应该在程序刚刚加载的时候创建,程序结束的时候销毁。是看程序的生命周期...
xiaolee59
2015-11-05 10:44:41 +08:00
连接池的话一般是程序启动的时候就开出来。
但如果是全局的单个连接的对象的话,其实就没必要占用程序启动的时间,在代码里按需启动即可,由第一个需要数据库连接的来初始化,然后大家共享就行。
要考虑下你们的实际服务部署方式,想象一下一台物理机上开多个服务器进程的时候,假如太多东西都在程序初始化的时候启动的话,你的服务得多长时间才能启动完毕?

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

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

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

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

© 2021 V2EX