在 HBase 中,为了提供单行事务支持,它使用行锁定概念。假设,例如
Put p=new Put("/*Row Key*/");
该语句将锁定该行。
所以,直到我们完成
表.put(p)
锁不会被释放。
所以,在这之间,如果我开始一个新的看跌期权,即
Put p1=new Put("/Row Key");
p1 put 不应该工作,因为该行已经被锁定,但在 HBase 0.94 中,当我尝试它工作时。
关于行锁链接 我在哪里看到过 Row Lock http://blog.cloudera.com/blog/2013/01/apache-hbase-internals-locking-and-multiversion-concurrency-control/我的理解有什么问题吗。如果不是,单行事务支持如何在行锁定的情况下工作。
HBase 的工作方式是,当应用 Put 时,锁被保存在区域服务器(而不是客户端)中,以确保行写入原子块中,但它不提供快照隔离 http://en.wikipedia.org/wiki/Snapshot_isolation(你需要使用类似的东西omid https://github.com/yahoo/omid如果你想要的话)。
假设您的两个 put 不是从同一客户端发送的(在这种情况下,它们可能是同一事务的一部分),并且除非 HBase 将崩溃或在 put 之间的某处发生超时(例如由于压缩)。您的两个 put 将根据它们到达的顺序在 HBase 中连续应用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)