在 HBase 中,为了提供单行事务支持,它使用行锁定概念。假设,例如
Put p=new Put("/*Row Key*/");该语句将锁定该行。
所以,直到我们完成
表.put(p)
锁不会被释放。
所以,在这之间,如果我开始一个新的 put 即
Put p1=new Put("/行键");
p1 put 不应该工作,因为该行已经被锁定但是当我尝试它工作时在 HBase 0.94 中。
关于行锁链接我在哪里看到了行锁我的理解有什么问题吗?如果不是单行事务支持如何与行锁定一起工作。
在 HBase 中,为了提供单行事务支持,它使用行锁定概念。假设,例如
Put p=new Put("/*Row Key*/");该语句将锁定该行。
所以,直到我们完成
表.put(p)
锁不会被释放。
所以,在这之间,如果我开始一个新的 put 即
Put p1=new Put("/行键");
p1 put 不应该工作,因为该行已经被锁定但是当我尝试它工作时在 HBase 0.94 中。
关于行锁链接我在哪里看到了行锁我的理解有什么问题吗?如果不是单行事务支持如何与行锁定一起工作。
我相信在您发出 table.put(p) 命令之前,该行不会被锁定。当您使用 Put p = new Put("row key"); 您正在创建一个对象来保存有关写入的信息,但您实际上还没有与数据库通信。当您准备好尝试写入数据库时,键入 table.put(p)。如果两个 put() 操作同时发生在同一行上,其中一个可能会失败。但我认为不可能长时间持有行锁,因为锁定发生在 HBase 内部,无法从外部控制。因此,该过程如下所示:
这意味着,如果两个人尝试将 put()s 发送到同一行,则只有一个人会成功,并且 HBase 将向另一个客户端发送错误消息。
假设两个客户端尝试同时 put() 相同的行键。
按照上一题的ip地址和登录时间的例子,如果有人同时登录两次,从不同的IP地址,那么只会将一个IP写入数据库,但时间戳会匹配写入的IP .
我可能不完全理解这一点,但这是我目前的理解。我希望它有所帮助。