繁体   English   中英

使用 npgsql 从 postgre 中“并行”读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM