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

Posted

技术标签:

【中文标题】从技术上讲,啥是数据库连接?【英文标题】:What is a Database Connection, technically?从技术上讲,什么是数据库连接? 【发布时间】:2016-03-23 14:17:04 【问题描述】:

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

我的理解是:

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

这是正确的定义吗?

因此,当我在一台计算机上运行 mysql 并在另一台计算机(或同一台计算机,并不重要..)上运行一个 java 应用程序时,当我执行以下操作时:

conn.open();

打开一个数据库连接..

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

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

【问题讨论】:

连接一词有多种含义。它可以指两个实体之间的物理或逻辑路径,它可以指路径上的流,它可以推断地指与路径的建立相关联的动作,或者它可以指两个或多个之间的关联实体,无论是否考虑它们之间的任何路径。 Vint Cerf 和 Bob Kahn,分组网络互通协议 在分组交换中,没有连接。你所说的连接是两个端点之间的共识错觉。斯图尔特柴郡 【参考方案1】:

从技术上讲,什么是连接池?

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

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

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

conn.close 会将连接返回到池中。

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

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

【讨论】:

嗯,是的,谢谢。但主要问题是:首先什么是数据库连接? @KorayTugay 数据库连接是数据库服务器及其客户端软件相互通信的方式。【参考方案2】:

你知道什么是套接字吗? tutorial 中的描述很简短,但很好。

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

连接池可以最大限度地减少套接字打开开销。通常,您不关心通过连接(假设所有连接为同一用户)您从数据库收到的结果集。

你不想消耗资源,所以你想表现得很好,当你完成后关闭你的连接。我相信如果有一段时间没有活动(超时),今天的每台服务器都会结束连接。

【讨论】:

以上是关于从技术上讲,啥是数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

到底啥是Socket?

数据库问题:啥是Connection String

Hibernate:啥是连接池,为啥默认的连接池不适合生产?

iPhone 3G / WiFi 连接

请问ftp中啥是PASV模式

Hive JDBC 连接设置或与 MySQL 的映射