2

我想知道是否有可能,在插入一组行之后,启动一个异步执行的操作,是非阻塞的,并且不需要通知请求的发起者 - 结果。

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

我可以告诉你,我可能会有 100 个这样的作业同时执行,每个作业可能在 5 个表上运行,每个表上的插入次数在 200-1000 之间。

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

4

3 回答 3

3

LISTEN/NOTIFY可能是您需要的,让单独连接上的侦听器运行LISTEN notifyname(它可以使用非阻塞套接字并使用poll,或者您的应用程序正在运行),并且您的代码在处理后运行NOTIFY notifyname,但是您将需要某种方式让您的 LISTENing 线程知道完成了哪些记录,也许使用某种日志表。另外值得注意的是 libpq 支持异步模式(至少由DBD::Pg支持,可能还有其他 Pg 驱动程序)。

于 2010-03-09T15:57:02.160 回答
0

我会以某种方式添加不同的答案。

您可以使用 Redis 临时存储您的请求,然后您可以每 X 秒对它们进行批处理。(至少你可以一次插入多行 - 通常你可以做更多......)。

也许是时候检查一下 Kafka 或 Amazon 的 Kinesis。它是一种更高级的服务,可让您执行与我上面提到的类似的操作。

于 2017-08-17T10:15:01.540 回答
-1

由于您实际上只是简单地对大量行进行批处理,为什么不让 cron 作业在您完成后处理这些行呢?

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

于 2010-03-06T14:30:01.063 回答