Events Postgres:Post语句(或insert)异步、非阻塞处理

Events Postgres:Post语句(或insert)异步、非阻塞处理,events,postgresql,concurrency,asynchronous,nonblocking,Events,Postgresql,Concurrency,Asynchronous,Nonblocking,我想知道是否有可能,在插入行集合后,启动异步执行的操作是非阻塞的,并且不需要将请求通知发端人-结果 我正在处理大量的事件,我可以保证插入后逻辑不会失败——我只希望在我的事件源中有一个插入线程,我希望这个线程能够在没有阻塞的情况下继续运行,并且不负责任何交付后的簿记 我可以告诉你,我可能会有100个这样的作业并发执行,每个作业可能在5个表上运行,每个表上有200-1000个插入 一个正确方向的提示就足够了 既然您实际上只是批量处理大量行,为什么不让cron作业在处理完行后对其进行后期处理呢 只需将

我想知道是否有可能,在插入行集合后,启动异步执行的操作是非阻塞的,并且不需要将请求通知发端人-结果

我正在处理大量的事件,我可以保证插入后逻辑不会失败——我只希望在我的事件源中有一个插入线程,我希望这个线程能够在没有阻塞的情况下继续运行,并且不负责任何交付后的簿记

我可以告诉你,我可能会有100个这样的作业并发执行,每个作业可能在5个表上运行,每个表上有200-1000个插入


一个正确方向的提示就足够了

既然您实际上只是批量处理大量行,为什么不让cron作业在处理完行后对其进行后期处理呢


只需将它们标记为未处理(或将它们重定向到带有触发器的处理表)并在完成后立即处理它们。

可能是您所需要的,让一个侦听器在单独的连接上运行一个LISTEN notifyname(它可以使用非阻塞套接字和轮询,或者无论您的应用程序如何工作),代码在处理后运行NOTIFY notifyname,但您需要一些方法让侦听线程知道完成了哪些记录,可能需要某种日志表。另外值得注意的是,libpq支持(至少其他Pg驱动程序也支持它)。

我将添加不同的答案

您可以使用Redis临时存储请求,然后可以每X秒批处理一次。(至少您可以一次插入多行-通常可以执行更多…)


也许是时候检查卡夫卡或亚马逊的动觉了。这是一种更高级的服务,它可以让你做类似于我上面提到的事情

数据是不间断的:/n创建一个cronjob来替换用于每隔
n
分钟插入的触发器怎么样。这样,您可以每隔
n
分钟写入一个新表,在替换触发器后,您将处理上一个表并将其写入实际的目标表。这是一种可能性,我将不得不仔细考虑这一点——也许从客户端阻塞并直接写入目标表是一个更好的选择。你能告诉我你是如何解决这个问题的吗?通常,这是我在oracle中使用dbms_作业/时间表执行的任务,但我在pg中缺少此功能。因此,我遇到了一个非常古老的线程,有一个非常类似的问题……我正在编写自己的数据处理引擎:Dthx for info。我现在使用dblink\u send\u查询。但我的“问题”是,我必须确保触发触发器的连接必须打开,直到每个dblink查询完成。