使用多个处理节点锁定更新行的策略

时间:2017-10-11 10:01:19

标签: java multithreading jdbc database-design architecture

我在Spring Boot with PostgreSQL上有一个应用程序。

应用程序对数据库中的行执行更新。在过去,SELECT FOR UPDATE SKIP LOCKED获取新数据并在一个线程中进行更新,这是为了防止多个节点更新同一行(从而加快文档的更新过程)。

现在为了加快处理速度,select rows和执行requests更新(到外部服务)是在单独的threads(多个具有RestTemplate的工作人员以平滑I / O等待时间)通过准备更新填充此队列,另一个线程工作者通过从队列中选择并插入数据库来执行后处理。所以现在selectupdate处于不同的流程中,并且可以在不同的交易中使用。

当处理分离到不同的线程以防止不同的节点更新相同的行时,保存SELECT FOR UPDATE SKIP LOCKED行为的好方法是什么?

我考虑向update-status update-started node添加几个字段,并选择WHERE STATUS != 'IN PROGRESS',并防止在应用崩溃时保留行,添加{{1} }}。

第二种方式将文件池中的连接发送到另一个进程,也许这是更好的解决方案。据我所知,我也可以选择哪个节点获取锁定,这样也有利于监控。

0 个答案:

没有答案