Web应用程序中的数据库连接

时间:2017-10-13 19:52:08

标签: mysql sql database postgresql database-connection

以下是我们可以在Web应用程序环境中用于数据库连接的不同技术。

  1. Application Context Database Connection:在所有请求中只共享一个数据库连接。
  2. Database Pooling:打开固定数量的数据库连接并共享所有请求之间的连接。
  3. New Database Connection per request:为每个请求打开一个连接。
  4. 这些技术的优点和缺点是什么?开发人员应该使用哪一个?

2 个答案:

答案 0 :(得分:2)

选项1.在所有Web用户之间共享单个数据库连接必然会因某种原因而失败。一个长时间运行的查询和整个服务器将停止运行。这是一个艰难而快速的" no" 99.9%的现代应用程序,甚至非基于Web的应用程序。

选项2.连接池。可能是Web应用程序连接到数据库的第二种最常用的技术。首先,如果DB和Pool / web应用程序位于同一台计算机上,则收益将非常有限。但是,池和Web应用程序可以轻松存在于同一硬件上。这样做的好处是数据库连接打开成本高,而且程度较低,保持打开成本高昂。打开连接需要CPU使用率和内存分配。池连接可以保持几十个连接可以连接到"几乎是瞬间。内存已经被分配,大部分设置工作已经完成,因此连接和断开池是相对惨重的。池通常始终保持一定数量的连接,并随着流量的增加而增长。在流量过大的情况下,池通常会对连接请求进行排队,以便DB不会过载。队列后面的用户会遇到延迟,但系统会慢慢消失,并且由于内存不足而通常不太可能停止运行和磁盘交换。

选项3.每个请求的新数据库连接。在轻度到中度使用的系统中,它并不是一个糟糕的选择,并且通常很容易在以后升级到一个小便池。但请记住,每个数据库连接(每个页面加载)都需要打开和关闭数据库连接,这涉及CPU和内存分配。实际上,如果您的网页加载速度很快,您的用户群很小且一致,并且您的流量相当一致,它可以正常工作。许多DEV,CAT和QA环境直接连接,没有使用。缺点是#1,绝对没有办法控制与DB的连接。如果查询挂起,您可能会有数百个连接突然中断数据库,有时需要重新启动或重新启动数据库才能纠正这种情况。

例如:您在网站的主页上写了1个错误的查询,导致它需要3​​秒才能运行而不是.3秒。最终,您的网站在任何一个时刻都有1-2页运行,现在可能会达到10-20。现在那些10-20页= 10-20个DB连接不断打开和关闭,平均打开10-20个。这个问题会越来越多,使用越来越多的内存,直到达到连接限制(或者更糟糕的是,耗尽所有内存和现在交换的所有内存)。在这一点上,一切都停止了。

请记住,连接会占用数据库和应用服务器/池上的资源。当你的数据库正在分页到磁盘时,大多数时候,所有希望都会因为没有重置某些内容而进行正常恢复而丢失 - 显然它可能会发生,但是如果没有代码修复,你通常会重新启动以给自己一些时间,直到问题不可避免再次发生,希望到那个时候,你已经找到了错误的查询或错误的配置并修复了它。

选项2为您提供了最多选择。它通常不是一个管理上的头疼,但如果你在一台机器上运行它,那么好处是有限的。如果您拥有至少2台计算机(应用服务器和数据库服务器),这是一个简单的解决方案,通常可以防止许多系统过载。

答案 1 :(得分:0)

公司的Web应用程序如何使用户整天保持连接状态,我可以为每个用户维护一个连接吗?那将是第四个选项:

  1. 每个已连接用户的新数据库连接:成功登录后,与给定用户打开一个新连接,并将其坚持到Web会话。会话失效(注销或超时)时必须关闭。