当前位置:  开发笔记 > 后端 > 正文

数据库和连接

如何解决《数据库和连接》经验,为你挑选了1个好方法。

我有兴趣知道数据库如何处理未启动连接的实体明确关闭的连接.

    假设我有一个一次只能接受2个并发连接的数据库.我有一段代码打开一个连接,永远不会关闭它.这段代码永远运行,但它在生命周期中仅使用一次连接,但连接对象永远不会超出范围,因此不会进行垃圾回收.假设我运行此代码的2个实例.是否意味着在程序终止或连接超时(由于不活动)之前,数据库不能再接受连接?

    在上面的场景中,如果连接对象是垃圾收集的,那么连接是自动终止还是依赖于我正在使用的数据库驱动程序,或者在我明确关闭连接之前连接没有终止?

    如果我在一段代码中打开一个连接并且我没有显式关闭连接,但程序终止,那么数据库如何回收该连接?

cletus.. 5

数据库连接的基础协议通常基于TCP / IP。可以通过以下几种方式之一终止连接:

    服务器正常关闭它,并从客户端收到确认。

    客户端正常关闭并从服务器收到确认;

    连接超时。客户端和服务器分别通过各自的操作系统告知连接已关闭。

    两侧的连接均被强制关闭。

在(3)的情况下,必须经常发送虚假消息来保持TCP连接的活动,以避免超时。您的连接可能会超时,因为双方都没有这样做(对于数据库连接,这通常不是您想要执行的操作)。

一侧完全有可能有一段时间认为连接已关闭,而另一侧仍然认为连接已打开。在这种情况下,可能会发送消息(并且通常将其丢弃)。

每个连接(“套接字”)都使用称为文件描述符的操作系统资源(在UNIX中,您的OS可能将其称为其他名称),它是I / O资源的句柄,并且与用于打开文件的内容相同(再次,操作系统可能会有所不同)。

数据库上的连接限制将是最低的:

操作系统的配置限制;

该进程允许的最大文件描述符(减去用于I / O活动的文件描述符);和

(可能)系统设置或有关连接限制的策略。

如果连接不是基于TCP的(例如,在UNIX系统上通常与MySQL一起使用的文件系统套接字),则原理实际上是非常相似的。

无论如何,这个故事的寓意在于,数据库连接(无论其形式如何)都涉及某种操作系统资源。您的程序直接或间接要求该资源。如果程序死了,操作系统将收回它(也许不是立即恢复,而是最终恢复)。如果连接被垃圾回收,则资源将被释放,就像被强制关闭一样。

保持连接打开并驱动任何限制的外部资源(而不是客户端使用的代码)。



1> cletus..:

数据库连接的基础协议通常基于TCP / IP。可以通过以下几种方式之一终止连接:

    服务器正常关闭它,并从客户端收到确认。

    客户端正常关闭并从服务器收到确认;

    连接超时。客户端和服务器分别通过各自的操作系统告知连接已关闭。

    两侧的连接均被强制关闭。

在(3)的情况下,必须经常发送虚假消息来保持TCP连接的活动,以避免超时。您的连接可能会超时,因为双方都没有这样做(对于数据库连接,这通常不是您想要执行的操作)。

一侧完全有可能有一段时间认为连接已关闭,而另一侧仍然认为连接已打开。在这种情况下,可能会发送消息(并且通常将其丢弃)。

每个连接(“套接字”)都使用称为文件描述符的操作系统资源(在UNIX中,您的OS可能将其称为其他名称),它是I / O资源的句柄,并且与用于打开文件的内容相同(再次,操作系统可能会有所不同)。

数据库上的连接限制将是最低的:

操作系统的配置限制;

该进程允许的最大文件描述符(减去用于I / O活动的文件描述符);和

(可能)系统设置或有关连接限制的策略。

如果连接不是基于TCP的(例如,在UNIX系统上通常与MySQL一起使用的文件系统套接字),则原理实际上是非常相似的。

无论如何,这个故事的寓意在于,数据库连接(无论其形式如何)都涉及某种操作系统资源。您的程序直接或间接要求该资源。如果程序死了,操作系统将收回它(也许不是立即恢复,而是最终恢复)。如果连接被垃圾回收,则资源将被释放,就像被强制关闭一样。

保持连接打开并驱动任何限制的外部资源(而不是客户端使用的代码)。

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有