Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 服务的多个实例处理单个表中的行,什么';It’防止碰撞的最好办法是什么_Database_Algorithm - Fatal编程技术网

Database 服务的多个实例处理单个表中的行,什么';It’防止碰撞的最好办法是什么

Database 服务的多个实例处理单个表中的行,什么';It’防止碰撞的最好办法是什么,database,algorithm,Database,Algorithm,我们正在尝试构建一个系统,在不同的机器上共享处理负载的多个服务实例 每一个都将检查一个表,如果该表上有要处理的行,它将选择第一个,标记它正在处理,然后处理它,然后标记它已完成。重复冲洗 当两个实例a和B执行以下操作时,防止出现赛车状况的最佳方法是什么 A(1)读取表,找到要处理的第1行, B(1)读取表,找到要处理的第1行, A(2)将其标记为行处理 B(2)标记它的行处理 在单个应用程序中,我们可以使用锁或互斥锁 我可以把A1和A2放在一个事务中,是这么简单,还是有更好更快的方法 我是否应该打

我们正在尝试构建一个系统,在不同的机器上共享处理负载的多个服务实例

每一个都将检查一个表,如果该表上有要处理的行,它将选择第一个,标记它正在处理,然后处理它,然后标记它已完成。重复冲洗

当两个实例a和B执行以下操作时,防止出现赛车状况的最佳方法是什么

A(1)读取表,找到要处理的第1行, B(1)读取表,找到要处理的第1行, A(2)将其标记为行处理 B(2)标记它的行处理

在单个应用程序中,我们可以使用锁或互斥锁

我可以把A1和A2放在一个事务中,是这么简单,还是有更好更快的方法

我是否应该打开它的头部,以便步骤如下:

A(1)将下一行标记为我要处理的行 A(2)将其返回给我进行处理


我认为这个问题以前已经解决过很多次了,所以我正在寻找“标准”解决方案,如果有不止一个,那么它的优点和缺点。

事务是一个很好的简单答案,有两个可能的缺点:

1) 您可能需要查看数据库的详细信息。有时,默认的一致性设置并不能保证在所有可能的情况下都是绝对一致的

2) 有时,与使用数据库排队和分配工作相关联的访问模式在一个不期望它的数据库上很难实现

一种可能性是研究可靠的消息队列系统,它似乎与您正在寻找的非常匹配—工作机器可以从共享队列读取工作。可能的起点是和