1

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

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

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

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

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

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

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

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

4

1 回答 1

3

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

你不能。正如您正确指出的那样,生成事务直到生成事务开始后才会完成。我能想到的唯一方法是在生成下一个任务之前在单独的隔离事务中评估您的集合更新代码。

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

从来没听说过。最佳实践是将生成任务作为你做的最后一件事,如果出现故障,你会在生成后续任务之前尽早发现它。

这里的第三种选择是查看某种外部编排来运行这些查询。例如,您可以为第 1 步发出查询,返回它的 URI,然后为第 2 步发出查询。我更喜欢这种方法,以便在生成太多任务并减慢速度的情况下,您可以更轻松地停止代码你的集群。繁重的任务产卵让我很紧张。这也可以让您更轻松地跟踪流程中的哪个步骤失败。

于 2018-07-14T13:14:13.720 回答