【问题标题】:Multithreading in C functions for PostgresPostgres 的 C 函数中的多线程
【发布时间】:2021-03-24 06:28:52
【问题描述】:

我正在阅读 SPI https://www.postgresql.org/docs/13/spi.html 的文档,我有几个问题:

  1. 有什么方法可以在 C 中使用多线程连接到 Postgres(通过 SPI 或 Libpq)并从一个表中读取数据? (例如,一个线程从 1 到 100 行读取数据,第二个从 101 到 200 行等)。
  2. 我知道 Postgres 可以使用工作程序(例如,用于 SELECT),但是 SPI 将如何对此做出反应(如果我发送命令“select * from table_name”)

【问题讨论】:

  • SQL 语言和 PostGreSQL 支持 pagination using LIMIT and OFFSET... 因此将查询的不同子集路由到不同线程应该很容易。我不确定它如何(如果)提高性能,这取决于具体的用例。
  • 您希望执行更快还是有其他原因进行 MT?
  • 是的,我想处理大表(比如 100 万行),并且我想更快地执行。

标签: c postgresql multithreading


【解决方案1】:

不要在 PostgreSQL 后端使用多线程。该系统不是为此而设计的,如果你这样做,那么有趣但不受欢迎的事情必然会发生。

使用自定义后台工作者是更好的主意。附加到数据库后,使用 SPI 处理语句就没有问题了。

【讨论】:

    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2018-09-27
    • 2019-07-23
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多