最近面腾讯-阅文时遇到这样一个问题
……
Q:为什么要用数据库连接池?
A:因为新建一个和数据库的连接的开销很大。
Q:那为什么连接的开销很大呢?或者是说,新建数据库连接的开销主要在那些方面呢?
A:emmm…….书上这么说(我去去去去去。。。。。完全没想到过这个问题啊。。。)
Q:你可以从内存,系统调用,socket连接考虑
A:(Orz……当时只想到了系统调用的开销)
……….
面完了之后,找了一下关于这个问题的答案
下面是找到的看起来很有道理的答案
数据库连接
我们都知道数据库连接创建的开销很大,但是数据库连接的原理是什么呢?到底是哪个环节导致了开销的出现?我还有点懵逼,所以搞懂数据库连接是个重要的问题。
一个数据库连接的流程是这样的:
- 应用程序的数据访问层请求DataSource来获取一个数据库连接。
- DataSource使用数据库驱动来打开一个数据库连接。
- 创建数据库连接,同时打开了一个TCP socket。
- 应用程序进行数据库的读写。
- 连接已经不再需要了,因此关闭它。
- 关闭socket。
我们有一个示意图可以看: