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

盎司

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

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

我什至想知道是否只通过写PERFORM myProcedure()就可以了,因为perform期望没有返回值。

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

克雷格·林格(Craig Ringer)

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

PostgreSQL协议支持此功能。某些客户端驱动程序(包括libpqPgJDBC)支持异步查询。但是,我知道的唯一支持流水线的驱动程序是PgJDBC,它不支持单个查询的流水线,仅通过批处理运行的查询executeBatch

要使用libpq的异步机制执行所需的操作,您需要一个连接池(因为它无法在一个连接上进行流水线处理),并且您需要定期检查以查看对连接的查询是否完整。您无法忘记并忘记,并且没有用于完成的回调机制。epoll循环这样的操作可以检查新的未决输入,这听起来很适合Node.js的事件驱动模型。

关于将流水线异步模式添加到中libpq已经进行了一些讨论,查询将返回将来的对象,您可以检查结果对象是否已填充和/或等待它,同时还分派了更多查询。AFAIK尚未执行任何操作。您可能想参与其中。从技术上讲,这并不是那么困难,并且主要是因为没有足够的人来帮助实现它。说出pgsql-hackers。

我什至想知道是否只写PERFORM myProcedure()就可以了,因为perform期望没有返回值。

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

有关node-postgres的信息,请参见:

看起来异步回调是在节点上执行操作默认方式。它不会被流水线化。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章