如何解决避免 postgresql db 中多个 spark 作业更新同一个表中的相同行的死锁的最佳方法是什么?
我有一个用例,需要同时从四个 spark 作业更新 postgresql 表中的相同行。 spark 作业使用来自 JDBC 的“executeUpdate()”来更新同一个表。 Spark 作业是流式作业,需要连续存储数据。
我正在考虑依靠基于行的锁或基于表的锁来解决死锁问题。我的以下假设是否正确?
基于行的锁
在每个 spark 作业中,我在要在 executeUpdate 中运行的 sql 语句周围添加“BEGIN”和“COMMIT”。然后,我添加“SELECT xxx FOR UPDATE”以明确锁定每个火花作业中受影响行的行。根据我的理解,下一个 spark 作业将自动等待基于行的锁被释放,以便为上一个作业中受影响的行执行更新语句。
基于表的锁
在每个 spark 作业中,我在要在 executeUpdate 中运行的 sql 语句周围添加了“BEGIN”、“LOCK TABLE table”、“COMMIT”。在我的理解中,显式的“LOCK”命令将在其事务期间锁定整个表。当第二个 spark 作业尝试锁定表时,它会等到第一个 spark 作业释放锁。
上述方法是否适用于死锁问题?由于 spark 作业是流式作业,我更喜欢基于行的作业,这样可以节省等待时间。有没有更好的解决方案?谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。