gpt4 book ai didi

javascript - Node.js (node-pg) 或 C (libpq) - 执行 PostgreSQL 请求而不等待响应?

转载 作者:行者123 更新时间:2023-11-30 15:17:36 28 4
gpt4 key购买 nike

为了提高效率而不是消耗 PostgreSQL 池,我想执行一些请求而不是等待它们响应或失败。 100% 的请求都是返回 VOID 的重故障安全(内部错误捕获)函数,我希望能够执行许多请求,而不必等待响应来释放池连接,因为响应始终为 null,因为所有这些过程总是返回 VOID。

我有什么选择?我愿意接受不同的解决方案。

我什至想知道是否只需编写 PERFORM myProcedure() 就可以工作,因为 Perform 不需要返回值。

如果我从未检索到响应,这些 libpq 机制会起作用吗?或者它会阻塞我的所有池,因为我从未检索到空值。 http://www.postgresql.org/docs/9.4/static/libpq-async.html

最佳答案

您似乎正在寻找带有管道化异步查询。查询在连接上排队,按发送顺序执行,并按执行顺序返回结果。

这是 PostgreSQL 协议(protocol)支持的。某些客户端驱动程序(包括 libpqPgJDBC)支持异步查询。但是,据我所知,唯一支持管道传输的驱动程序是 PgJDBC,并且它不支持单个查询的管道传输,仅支持通过 executeBatch 运行的批量查询。

要使用 libpq 的异步机制来完成您想要的操作,您需要一个连接池(因为它无法在一个连接上进行管道传输),并且您需要定期检查查询是否已完成一个连接。你不能一劳永逸,也没有完成的回调机制。类似于 epoll 循环来检查新的待处理输入就可以了,听起来这很适合 Node.js 的事件驱动模型。

关于向 libpq 添加管道异步模式进行了一些讨论,其中查询返回 future 对象,您可以检查结果对象是否已填充和/或等待它,同时还分派(dispatch)更多查询。 AFAIK 目前尚未实现任何措施。您可能想参与其中。从技术上来说,这并不难,主要是没有足够想要它的人来帮助实现它。谈论 pgsql-hackers。

I was even wondering if by just writting PERFORM myProcedure() it would just work since perform expects no return value.

没有。它还在等待。它必须知道是否存在错误,并且后续代码也允许预期该过程的任何副作用都已完成。

对于 Node postgres,请参阅:

看起来异步回调是在 Node 上执行操作的默认方式。它不会被管道化。

因此,我要么使用带有 libpq 的连接池(使用异步查询和 epoll 循环),要么使用 node-postgres。

关于javascript - Node.js (node-pg) 或 C (libpq) - 执行 PostgreSQL 请求而不等待响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32263072/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com