gpt4 book ai didi

hadoop - HBase checkAndPut 原子性澄清

转载 作者:行者123 更新时间:2023-12-02 07:10:14 26 4
gpt4 key购买 nike

我只是想根据HBASE的文档弄清楚HBASE checkAndPut是如何工作的,

Atomically checks if a row/family/qualifier value matches the expected value. If it does, it adds the put. If the passed value is null, the check is for the lack of column (ie: non-existance)

当它说“原子地”时,我假设它将锁定并隔离该行,并在执行 put 之前进行比较,以防止对此行进行任何其他操作。另外,checkAndPut用于检查不存在,如果行键不存在,它将隔离/锁定什么?

对此我有两个理论:

  1. HBASE checkAndPut 不会隔离任何不存在的行,这是否意味着当您对同时不存在的同一行执行 checkAnPut 时,两者都会被成功处理?

  2. 是否通过行键隔离?

我只是想确认哪个是正确的实现,但对我来说,理想的实现是第二个。

或者 HBASE checkAndPut 不适合用于检查行是否存在?也许只有在存在行并且仅检查系列/限定符时才使用它才是理想的选择?因为JAVA API看起来像这样。

最佳答案

在尝试了解 checkAndPut 在行不存在的情况下如何表现之前,您应该首先了解 mutations 在 HBase 中如何工作。

HBase 中的突变

HBase 中的突变是任何写入操作,例如PutDelete 等。由于 HBase 是一个强一致性系统,它为单行(跨列族)提供原子性保证,因此特定行的所有突变都必须通过同一服务器。您应该阅读 HBase 文档中有关区域和区域服务器概念的更多信息,以了解 HBase 如何在一组服务器之间划分服务行键空间的非重叠分区的责任。

每当区域服务器获得特定行的突变时,它都会获取该行键值的内存中写锁。这本质上意味着四件事:

  1. 由于一行只能由一台区域服务器写入,因此永远不会有超过一台服务器尝试写入同一行并获取锁定。
  2. 由于锁在内存中,如果获取锁后服务器立即崩溃,锁会自动释放。然后,该区域的责任将优雅地转移到新服务器,但您的操作将会失败(不考虑客户端上的自动重试)。
  3. 由于写锁是针对整行的,因此对列 x 的更改将导致对同一行的列 y 的操作被阻止。
  4. 由于锁定的是行键的值(区域服务器在内存中维护当前锁定行的列表),因此该行不一定必须事先存在。

CheckAndPut 在锁定语义方面与常规 Put 没有什么不同。唯一的区别在于,它在锁定行键后执行了额外的 Get 操作,以验证该行键的列的现有值(可以为 null,行键可能不存在)还没有)。这也是生成 Put 的行键必须与生成 Get 操作的行键相同的原因。否则,内存中锁定语义将无法提供一致性保证。这与 HBase 的其他 ACID 保证很好地配合,这些保证也仅在单行级别提供。

关于hadoop - HBase checkAndPut 原子性澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com