我正在使用Que和Sequel gem,我感兴趣的是编写需要处理大量数据的作业是否安全,数据是否比安全放置的数据多得多数据库事务,例如定期导入/导出80k +行(我目前处理1k记录事务批处理中的记录)。
我关注的是,如果gem / postgres在后台工作程序执行期间进行某种隐式事务,这可能会使回滚段失控并使DB崩溃在一个swappy hell中。
我之所以这样问,是来自文档的这一行:
安全 - 如果Ruby流程死亡,它工作的工作不会丢失,或者处于锁定或模糊状态 - 它们会立即被任何其他工作人员接收。
和我一起这个尖叫"嵌套在一个事务"中,如果我的恐惧是真的,可能会导致我的80k记录无声地包装到同一个回滚段。我可以在我的笔记本电脑上试一下,但是我的笔记本电脑比生产虚拟机强得多,所以我担心它可能会成功地破坏我的开发环境,然后在部署中光荣地崩溃。
有类似Que经验的人可以帮忙吗?
答案 0 :(得分:0)
Que devs回答:
每个作业周围没有隐式事务 - 通过使用咨询锁锁定作业ID来提供保证。如果客户端连接丢失,Postgres会负责为我们释放咨询锁,无论事务状态如何。