0

我正在将QueSequel gem 一起使用,如果编写需要处理大量数据的作业是否安全,我很感兴趣,这些作业比可以安全放置在 1 个数据库事务中的数据多,例如 80k+ 行的导入/导出定期(我目前处理 1k 记录事务批次中的记录)。

我担心的是 gem/postgres 是否围绕后台工作程序执行某种隐式事务,这可能会使回滚段失控并使数据库崩溃。

我问这个的原因是,文档中的这一行:

安全性——如果一个 Ruby 进程死掉了,它正在工作的工作不会丢失,或者处于锁定或模棱两可的状态——它们会立即可供任何其他工作人员使用。

对我来说,这尖叫着“嵌套在事务中”,如果我的担心是真的,这可能会导致我的 80k 记录默默地包装到同一个回滚段中。我可以在我的笔记本电脑上试一试,但我的笔记本电脑比生产虚拟机强得多,所以我担心它可能会成功地在我的开发环境中运行,然后在部署中崩溃。

有类似Que经验的人可以帮忙吗?

链接:关于 GH 的相同问题

4

1 回答 1

0

Que开发人员回答:

每个作业都没有隐式事务 - 通过使用咨询锁锁定作业 ID 来提供保证。如果客户端连接丢失,无论事务状态如何,Postgres 都会为我们释放建议锁。

于 2016-10-24T14:43:31.350 回答