HBase CheckAndMutate 是原子的,是否也一致?
The HBase CheckAndMutate is atomic is it also consistent?
我知道 HBase 使用 Multi-version concurrency control,并且 CheckAndMutate 的文档解释说它是一个原子操作。我不确定那是什么意思?
- 这是否意味着所有 mutate 操作都以原子方式执行?
- 这是否意味着 CHECK 也包含在同一个原子保护伞下?
假设我有:
- 一个值为 5 的单元格。
- 2 个工作人员同时想要更改单元格的值(使用
checkAndMutate
)如果值为 5
- worker-1 检查单元格值是否为 5 然后将值设置为 6
- worker-2 检查单元格值是否为 5 然后将值设置为 7
如果读取包含在同一个原子保护伞下,那么只有一个工人会成功。如果读取不包含在原子保护伞下,那么两者都可能成功。
我无法对此进行测试,但基于此 code 基础,我认为 Get 发生在锁定之后,因此在上述情况下只有一个工作人员会成功。
checkAndMutate
在 HBase 中的工作方式是 写锁 在 checkAndMutate
中读取之前需要更新的行手术。所以,是的,读取也包含在原子性保证中,只有一个工作人员会在您提出的场景中成功。
我知道 HBase 使用 Multi-version concurrency control,并且 CheckAndMutate 的文档解释说它是一个原子操作。我不确定那是什么意思?
- 这是否意味着所有 mutate 操作都以原子方式执行?
- 这是否意味着 CHECK 也包含在同一个原子保护伞下?
假设我有:
- 一个值为 5 的单元格。
- 2 个工作人员同时想要更改单元格的值(使用
checkAndMutate
)如果值为 5 - worker-1 检查单元格值是否为 5 然后将值设置为 6
- worker-2 检查单元格值是否为 5 然后将值设置为 7
如果读取包含在同一个原子保护伞下,那么只有一个工人会成功。如果读取不包含在原子保护伞下,那么两者都可能成功。
我无法对此进行测试,但基于此 code 基础,我认为 Get 发生在锁定之后,因此在上述情况下只有一个工作人员会成功。
checkAndMutate
在 HBase 中的工作方式是 写锁 在 checkAndMutate
中读取之前需要更新的行手术。所以,是的,读取也包含在原子性保证中,只有一个工作人员会在您提出的场景中成功。