派生函数以等待提交派生事务



我有一个查询,对数据库进行了一些更改(更改了几个文档上的一些集合(,然后生成了一个函数。

派生函数看不到在派生查询中所做的更改。

如果派生的函数自身派生,那么它在第二次运行时会看到更改(然后不再派生(。

我敢打赌,在MVCC机制为事务结束选择自己的时间戳之前,任务服务器会立即选择派生的函数。

所以我得到了两个相关的问题:

  • 1(如何确保派生的函数等待派生事务的结束?

  • 2( 是否可以生成一个函数,但只有在事务成功的情况下才将其实际放入任务服务器队列(如果事务失败,则不将其放入任务服务器,从而导致某种回滚(?

我现在能想到的一个解决方案是使用提交后触发器,但这听起来有点复杂,我希望在生成函数时可以选择这样做。

1(如何确保派生的函数等待派生事务的结束?

你不能。正如您正确指出的,派生事务要在派生事务启动后才能完成。我能想到的唯一方法是在生成下一个任务之前,在一个单独的、独立的事务中评估集合更新代码。

2(是否有可能生成一个函数,但只有在事务成功的情况下才能实际放入任务服务器队列(如果事务失败,则不将其放入任务服务器,从而导致某种回滚(?

我不知道。最佳实践是将生成任务作为最后一件事,如果出现故障,则在生成后续任务之前尽早发现。

这里的第三个选项是查看某种外部编排来运行这些查询。例如,您可以为步骤1发出查询,返回其URI,然后为步骤2发出查询。我更喜欢这种方法,这样在生成太多任务并降低集群速度的情况下,您可以更容易地停止代码。繁重的产卵任务让我非常紧张。这样还可以更容易地跟踪流程中哪一步失败了。

最新更新