【问题标题】:Should I leave a database connection open for an event handler?我应该为事件处理程序打开数据库连接吗?
【发布时间】:2017-07-21 20:08:03
【问题描述】:

我正在用 C# 编写一个应用程序,它将通过 ODBC 连接到 PostgreSQL 数据库。数据库将与我的应用程序位于同一台机器上。我的应用程序将有一个每秒可以触发几次的事件处理程序。处理程序会将两个值写入数据库表。我想知道我是否应该在应用程序启动时打开一个数据库连接以供事件处理程序使用,或者我是否应该在事件处理程序中打开它并在处理程序完成其工作时关闭它。

如果使用连接池,问题就变得没有意义了,因为如果现有连接可用,将始终使用现有连接,我可以打开和关闭连接,而不必担心减慢我的应用程序。但似乎 PostgreSQL 的 ODBC 驱动程序不支持连接池。或者是吗?

我正在使用 PostgreSQL Unicode 驱动程序版本 9.03.04.00。

非常感谢。

【问题讨论】:

  • 当原生驱动可用时为什么要使用 ODBC?
  • 您想要关闭并重新打开的唯一原因是数据库连接容量不足。这里有这种可能吗?
  • 史蒂夫,我是想说。我们使用 ODBC 是因为有些客户想要使用 PostgreSQL 以外的一些数据库提供程序,并且只要 ODBC 驱动程序可用,我们就不必更改我们的应用程序。
  • Hoodaticus,我更关心速度。我不希望打开和关闭数据库最终成为瓶颈。
  • 我建议使用某种 ORM 来管理数据库详细信息,例如使用中的提供程序。例如,使用 EntityFramework,您应该不会出现这个问题(用户使用不同的数据库系统),除非您使用一些在其他系统中不可用的非常特定的供应商功能。 (但不管是不是 ODBC,你在切换数据库系统时都会遇到麻烦)

标签: c# postgresql connection-pooling


【解决方案1】:

从不为每个请求打开和关闭数据库连接。只要交通量很少,它就可以工作,但否则它就是灾难的接收器。

您可以使用像 pgBadger 这样的外部连接池,但如果在您的情况下这太过分了,请保持连接打开。每秒写入数次显然是正确的做法。

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多