持久性与非持久性 - 我应该使用哪种?

时间:2010-09-22 02:32:35

标签: mysql

我的网站一直使用持久连接,根据我对它们的理解,没有理由不这样做。为什么在可以重用时关闭连接?我有一个网站,总共访问约7个数据库。它不是一个巨大的交通网站,但它足够大。如果我使用它们,你对持久性的看法是什么?

2 个答案:

答案 0 :(得分:9)

持久连接:

  • 您无法有效构建交易处理
  • 同一连接上不可能的用户会话
  • app不具备可扩展性。随着时间的推移,您可能需要对其进行扩展,并且需要管理/跟踪持久连接
  • 如果脚本由于某种原因无法释放表上的锁,则以下任何脚本将无限期地阻塞,并且应该重新启动数据库服务器。如果脚本执行在事务块完成之前结束,则事务块也将传递给下一个脚本(使用相同的连接)等。

持久连接不会带来任何非持久连接所能做的事情 那么,为什么要使用它们呢? 唯一可能的原因是性能,在创建指向SQL Server的链接的开销很高时使用它们。这取决于许多因素,如:

  • 数据库类型
  • MySQl服务器是否在同一台机器上,如果没有,多远?可能超出了您的本地网络/域名?
  • MySQL所在机器的其他进程超载了多少

总是可以用非持久连接替换持久连接。它可能会改变脚本的性能,但不会改变它的行为!

商业RDMS可能会通过并发打开的连接数来获得许可,而这里的持久连接可能会被误认为

答案 1 :(得分:1)

我对该领域的了解有限,所以我无法向您提供有关该主题的许多细节,但据我所知,创建连接并将其交给线程的过程确实需要资源,所以我会避免如果我是你的话。无论如何,我认为大多数决策都不能一概而论,取决于业务。

例如,如果您的应用程序与数据库持续通信并且仅在应用程序关闭时停止,那么可能需要持久连接,因为您可以避免之前提到的过程。

但是,如果您的应用程序仅偶尔与数据库通信以获取次要信息,那么关闭连接可能会更加明智,因为您不会在未使用的已打开连接上浪费资源。

还有一种称为“连接池”的技术,在其中您可以先验地创建一系列连接,并将它们保留在那里供其他应用程序使用。在这种情况下,连接对数据库是持久的,但对应用程序是非持久的。

注意:MSSQL中的连接始终是数据库的持久性,因为连接池是默认行为。