从技术上讲,什么是数据库连接?

时间:2015-12-17 07:37:05

标签: java mysql multithreading process operating-system

当我们说我们有一个"数据库连接"或者一个"连接池,它有多个连接打开",在技术层面,我们实际上是什么意思?

我的理解是:

  

数据库连接是指向数据库中运行的线程的链接   被阻止并等待来自另一个线程的输入的进程   在另一个过程中。

这是正确的定义吗?

所以,当我在计算机上运行mysql和在其他计算机(或同一台计算机上运行,​​并不重要......)运行的java应用程序时,当我执行类似的操作时:

conn.open();

打开数据库连接..

mysql进程是否会为我创建一个新线程并阻止该线程并开始侦听输入?

客户端怎么样?如果我不关闭连接会怎么样?

2 个答案:

答案 0 :(得分:2)

你知道插座是什么吗?这很简短,但在tutorial中有很好的描述。

您必须区分客户端和服务器端。我无法告诉MySQL,但通常服务器端是这样实现的,连接新线程正在处理请求。

连接池用于最小化套接字开放开销。通常,您不关心通过连接(假设所有连接为同一用户)从DB收到结果集。

您不想消耗资源,因此您希望保持良好状态,并在完成后关闭连接。我相信,如果一段时间内没有活动(超时),今天的每个服务器都会结束连接。

答案 1 :(得分:2)

  

技术上什么是连接池?

连接池是维护的数据库连接的缓存,以便在将来需要对数据库的请求时可以重用连接。连接池用于增强在数据库上执行命令的性能。为每个用户打开和维护数据库连接,特别是对动态数据库驱动的网站应用程序的请求,是昂贵的并且浪费资源。 在连接池中,在创建连接后,将其放置在池中并再次使用它,以便不必建立新连接。如果正在使用所有连接,则会建立新连接并将其添加到池中。连接池还可以减少用户必须等待建立与数据库的连接的时间。

  

客户端怎么样?如果我不关闭连接会怎么样?

从技术上讲,我们不会关闭从连接池获得的连接 - 事实上,当我们完成连接时,我们会将其返回到池中。

conn.close 将返回与池的连接。

使用连接池时,必须始终调用Connection.close()。物理数据库连接只有在java对象被销毁时才会释放。

如果您不关闭连接,则会发生连接泄漏,并且您的池将耗尽连接。发生这种情况时,您的应用程序将无限期地暂停,等待连接被释放,并且需要手动重新启动。