代码之家  ›  专栏  ›  技术社区  ›  Ben

持久性和非持久性-我应该使用哪个?

  •  6
  • Ben  · 技术社区  · 14 年前

    我的站点总是使用持久连接,基于我对它们的理解,没有理由不使用。当可以重用时,为什么要关闭连接?我有一个网站,可以访问大约7个数据库。它不是一个巨大的交通站点,但它足够大。你对持久性有什么看法,我应该使用它们吗?

    2 回复  |  直到 8 年前
        1
  •  9
  •   AsgarAli    8 年前

    使用永久连接:

    • 您不能有效地构建事务处理
    • 同一连接上不可能的用户会话
    • 应用程序不可扩展。随着时间的推移,您可能需要扩展它,它将需要管理/跟踪持久连接。
    • 如果脚本由于任何原因无法释放表上的锁,那么下面的任何脚本都将无限期阻塞,应该重新启动DB服务器。如果脚本执行在事务块完成之前结束,那么使用事务块,事务块也将传递到下一个脚本(使用相同的连接),等等。

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

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

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

    商业RDM可能通过并发打开的连接的数量获得许可,在这种情况下,持久连接可能无法提供服务。

        2
  •  1
  •   PedroC88    14 年前

    我对这个领域的了解有点有限,所以我不能给你很多关于这个主题的细节,但据我所知,创建连接并将其传递到线程的过程确实需要资源,所以如果我是你,我会避免它。不管怎样,我认为这些决定中的大部分不能被概括,而且依赖于业务。

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

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

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

    注意:由于连接池是默认行为,所以MSSQL中的连接始终对数据库保持不变。