[英]Reading in 'parallel' from postgre using npgsql
抱歉,如果这个问题看起来像重复,但我无法从其他答案中找出解决方案。 我有一个使用 Npgsql 访问的 postgre 数据库。 我有多个客户端同时从数据库读取。 我遇到异常 - 操作正在进行中。 我知道这背后的原因。 我在用
public bool ReadRecord(arguments)
{
....
NpgsqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
...
}
...
}
调用例程
private void GetBundleIdAndIsWat(arguments)
{
...
TaskQueue.GlobalInstance.AddTaskQueue(new Task<bool>(ReadRecord, InputData), tokenSource);
...
}
虽然阅读器没有为给定的线程而关闭,但另一个无法执行命令。
所有多个线程如何同时从数据库中读取? ExecuteReaderAsync 是否一次只允许一个线程执行命令? 在这种情况下,我将无法同时阅读,对吧? 我阅读了有关连接池的信息,但并不真正知道如何实现它。
所有多个线程如何同时从数据库中读取?
看起来您正在并行操作之间共享单个数据库连接。
每次操作只需使用单独的连接。
注意:
并行连接的数量受连接池大小和 PostgreSQL 的限制。 连接池大小默认限制为 100 个连接,您可以通过在连接字符串中设置MaxPoolSize
参数来更改它。 PostgreSQL 通过postgresql.conf
中的max_connections
参数限制此值,默认情况下此值也设置为 100。注意,一百个并行连接是一个相当大的值,在您真正需要之前不要增加它。
您提到了线程,但这是使用并行任务和异步代码而不是线程的好选择。 这也将允许以更有效的方式利用连接。
我阅读了有关连接池的信息,但并不真正知道如何实现它
您不需要自己实现连接池。
做得好的 ADO .NET 提供商已经实现了它。 只需像往常一样使用连接、命令和读取器:创建、使用、处置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.