与 PostgreSQL 连接的良好技术
Good technique for connections with PostgreSQL
我正在使用 Npgsql
通过 .NET 访问 PostgreSQL。我担心执行与数据库的连接的正确方法,因为在我看来,每次我想执行某些事务时打开连接然后关闭它是一项昂贵的操作。
所以这是总体思路:
public class PostgreSQL
{
private NpgsqlConnection conn; // <- one connection for this object, open all the time
public PostgreSQL(string connString)
{
conn = new NpgsqlConnection(connString);
conn.Open();
}
// ...here making some queries...
public void Close() => conn.Close(); // <- use this in the very end of the program
}
正如您在上面所看到的,我有一个 PostgreSQL
class.
实例的连接
我的问题:
这种做法对吗?或者我应该在每次要进行交易时打开和关闭连接 - 尽可能晚打开并尽快关闭?
如果我应该每次都打开和关闭连接 - 我是否应该编写一个队列来限制并发连接的数量?或者 PostgreSQL 会自己处理 - 理论上,我可以打开 200 个连接,它会没事的。
请与我分享您的经验^^
编辑:
我将 运行 每秒查询 100-200 个。
在我看来,您应该在需要时打开连接,然后立即关闭它。这将防止服务器上的大量连接保持活动状态。
根据我的经验,打开一个连接不会花费那么多时间(几毫秒,通常是你执行时间的一小部分),所以你不必太担心。
PostgreSQL 支持连接池(池大小为 customizable)所以常见模式:
using (NpgsqlConnection conn = new NpgsqlConnection(...))
{
...
}
应该是更好的选择。
我正在使用 Npgsql
通过 .NET 访问 PostgreSQL。我担心执行与数据库的连接的正确方法,因为在我看来,每次我想执行某些事务时打开连接然后关闭它是一项昂贵的操作。
所以这是总体思路:
public class PostgreSQL
{
private NpgsqlConnection conn; // <- one connection for this object, open all the time
public PostgreSQL(string connString)
{
conn = new NpgsqlConnection(connString);
conn.Open();
}
// ...here making some queries...
public void Close() => conn.Close(); // <- use this in the very end of the program
}
正如您在上面所看到的,我有一个 PostgreSQL
class.
我的问题:
这种做法对吗?或者我应该在每次要进行交易时打开和关闭连接 - 尽可能晚打开并尽快关闭?
如果我应该每次都打开和关闭连接 - 我是否应该编写一个队列来限制并发连接的数量?或者 PostgreSQL 会自己处理 - 理论上,我可以打开 200 个连接,它会没事的。
请与我分享您的经验^^
编辑: 我将 运行 每秒查询 100-200 个。
在我看来,您应该在需要时打开连接,然后立即关闭它。这将防止服务器上的大量连接保持活动状态。
根据我的经验,打开一个连接不会花费那么多时间(几毫秒,通常是你执行时间的一小部分),所以你不必太担心。
PostgreSQL 支持连接池(池大小为 customizable)所以常见模式:
using (NpgsqlConnection conn = new NpgsqlConnection(...))
{
...
}
应该是更好的选择。