从技术上讲,啥是数据库连接?
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,但通常服务器端是这样实现的,对于连接,新线程正在处理请求。
连接池可以最大限度地减少套接字打开开销。通常,您不关心通过连接(假设所有连接为同一用户)您从数据库收到的结果集。
你不想消耗资源,所以你想表现得很好,当你完成后关闭你的连接。我相信如果有一段时间没有活动(超时),今天的每台服务器都会结束连接。
【讨论】:
以上是关于从技术上讲,啥是数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章