【问题标题】:Is connecting to DB still costlier?连接到数据库是否仍然更昂贵?
【发布时间】:2009-12-29 18:04:14
【问题描述】:

我是 ASP.NET 的新手,刚刚构建我的第二个实时 Web 应用程序。

一年前我在学习 ASP.NET 时,有人告诉我 “连接并从数据库中获取数据的成本更高,因此尽可能少地连接并有效地重用检索到的数据” 。给出的原因是

  1. 首先需要建立与数据库服务器的连接。
  2. 与 IIS 相比,DB 服务器上的并发连接数会更少。
  3. 使用断开连接的架构,以便可以很快关闭连接(当然也有其他的 flexibilites) 等等等等。

当我的研究扩展时,我学会了存储从数据库中检索到的数据的其他方法,跨回发。但是现在,我正在一一了解到它们比连接到 DB 更昂贵。喜欢...

  1. 会话变量:内存大小与用户数量有关
  2. 查看状态:加密和旅行的过程使其成本更高。
  3. 应用程序变量:并非在所有情况下都如此有用。
  4. 缓存:(我知道它们,但直到现在才使用它们)。

另外,我反复建议不要将检索到的表存储在会话、视图状态等中,而是连接到数据库并在每次回发时重新获取它。

并根据基于 SQL Server 的会话状态管理来查看这一点,其中框架本身使用 DB 来存储会话。 我觉得,我应该忘记我最初对数据库连接的了解和认识。

你说什么???

也欢迎任何其他建议/提示。

谢谢

【问题讨论】:

  • 重新标记性能和数据库连接,以试图让一些关注这些标记的人参与讨论。

标签: .net asp.net performance database-connection


【解决方案1】:

您所说的通常是正确的,但连接池消除了建立连接的大量开销。

使用连接池时,您有一组连接,当向数据库发出请求时会使用这些连接。然后这些连接被回收以供后续使用。我在解释它方面做得很差,但一如既往,维基百科有一些很好的信息可以帮助您入门。

http://en.wikipedia.org/wiki/Connection_pool

如果您正在寻找灵丹妙药,例如始终使用 xxx,很遗憾没有。您需要评估每个场景并在那里做出决定。

例如,如果您与数据库服务器的连接速度较慢,您可能需要缓存检索到的数据,以尽量减少对数据库的调用次数。

另一方面,如果您的系统资源有限,那么频繁调用数据库可能是一个有效的选择。

您必须针对您开发的每个系统评估这些情况,以充分利用您的软件,但如果架构得当,通常很容易使系统适应您遇到的任何限制。

【讨论】:

    【解决方案2】:

    连接池可以极大地限制与数据库建立连接的成本。连接池是一种 ADO.NET(我认为)技术,只要连接字符串相同,它本质上就会恢复数据库连接。我也会小心缓存数据,除非你知道你的缓存数据是相当静态的。

    因此,总而言之,我想说不要担心建立与数据库的连接的成本。大多数 N 层断开连接的应用程序会频繁连接到数据库。我认为您不必担心这一点。

    兰迪

    【讨论】:

      【解决方案3】:

      如今,连接池减少了开销。

      我发现往返会影响性能,通常是因为 ORM :-)

      【讨论】:

        【解决方案4】:

        与本地 RAM 中的任何内容相比,数据库连接通常会很慢。是的,随着并发用户数量的增加,将内容存储在 RAM 中会导致内存使用量激增……所以?这就是跨多台机器扩展的目的。一切都是权衡。你需要看看你想要完成什么并选择交易什么。

        【讨论】:

        • 内存使用量甚至不必随着并发用户的增加而增加 - 这就是 Cache 类或更好的 memcached 之类的东西。
        【解决方案5】:

        使用连接池是个好主意。当您必须从数据库中获取数据时,JSON 是一种不错的方法。我们应该尽量避免 Session 和 View 状态,因为它们会多次降低应用程序的性能。

        【讨论】:

          【解决方案6】:

          我同意许多已经制作的 cmets。连接池意味着如果一个新的数据库连接位于池中并且可用,则不需要打开一个新的数据库连接。

          话虽如此,请注意重复访问数据库,特别是对于可以缓存的主列表类型的数据。用于数据库访问的面向对象代码因过多的数据库活动而臭名昭著,只要稍加规划就可以防止其中的大部分活动。利用 ASP.NET 的应用程序缓存来存储不经常更改的静态数据(当发生更改时,刷新并重新加载缓存)。

          我不喜欢会话变量,因为它们类似于全局变量并且会造成草率的编码。它们也不适合 REST、Azure 等采用的无状态编程模型。只要我的 2 美分。

          小心重载 Viewstate,但如果保持较小,我看不出有什么问题。

          -克里普

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-11
            • 1970-01-01
            • 1970-01-01
            • 2012-12-24
            • 1970-01-01
            • 2023-03-23
            • 2010-10-04
            • 2012-03-23
            相关资源
            最近更新 更多