此方案中最佳的数据库事务隔离级别是什么?

时间:2017-05-10 15:32:35

标签: node.js postgresql amazon-ec2 transactions distributed-computing

场景

我有一个在AWS上运行的Node.js应用程序。

在弹性负载均衡器后面有两个运行相同应用程序的EC2实例。如果服务器负载很高,则更多实例可以开始运行相同的Node.js应用程序,但总是至少有2个实例。

两个实例都连接到postgres的一个唯一实例:

enter image description here

每隔几秒钟,ELB就会收到由两个Node.js实例之一处理的HTTP POST请求。如果一切顺利,每个HTTP POST都以表中的新行结束,让我们称之为TABLE1。每行都有一个名为is_processed的布尔字段,允许识别行是否已经处理过。

每个Node.js实例也运行一个每隔几分钟执行一次的计划作业。计划的作业在TABLE1中搜索is_processedfalse的行并处理它们。如果处理逻辑顺利:

  • 步骤1:在TABLE2中插入或更新新行。
  • 第2步:TABLE1中的is_processed列已更新为true

这两个步骤发生在交易中。

问题

我的问题发生在:

  • 实例A获取一些is_processed=false行,然后在事务中开始处理。
  • 实例B在A提交其事务之前获取相同的is_processed=false行。

因此,某些行将被多次处理。

潜在的解决方案?

我相信这可以通过使用正确的level of isolation

来解决

enter image description here

我的问题是我不确定最佳隔离级别。我的猜测是我需要REPEATABLE_READ,因为没有删除操作?

我的另一个问题是我不知道这种锁定是否会导致AWS自动数据库备份出现任何问题

0 个答案:

没有答案