HBase是否支持嵌套事务(或等效的事务)?

时间:2018-11-09 16:54:12

标签: hbase

我想运行修改数据的测试,断言更改正确无误,然后回滚更改。按照典型的数据库说法,这称为启动事务,然后回滚。

我受MySql的限制,因为应用程序代码使用事务,因此测试无法进一步封装应用程序在事务中的更改。

如果我切换到HBase(我还有其他考虑因素,例如规模),我可以这样做吗?这是一种不确定向Google寻求什么的情况。

1 个答案:

答案 0 :(得分:1)

首先,很少有数据库支持真正的嵌套事务。但是,MySQL和Postgres都支持SAVEPOINT,可用于完成您要尝试执行的操作。如果您正在使用ORM之类的rails;它应该已经能够处理这种用例。

HBase中的交易

Apache HBase不支持常规意义上的事务,即它不提供启动和回滚操作的能力。HBase提供的唯一事务保证是:

  1. 行级操作的原子性。
  2. 在HBase区域上运行的任何扫描操作都将看到数据状态,就像扫描开始时一样。扫描运行时,它将看不到写入该区域的新数据。

我的建议是,对NoSQL数据库的期望不要与对关系数据库的期望相似。 HBase擅长处理数十PB的数据,以进行大量的点更新,点读取和范围扫描。但是,与管理MySQL实例相比,管理HBase群集要涉及更多的任务。在迁移到HBase时,您需要删除对关系数据库的许多要求。

也就是说,您尝试执行的操作有多种解决方法,根据您的确切设置,这些方法可能会起作用,也可能不会起作用。您可以在每次测试开始之前清理整个数据库/表。

解决此问题的另一种方法是在HBase之上使用另一个提供类似SQL语义的引擎。 Apache Phoenix是一个这样的项目,它拥有非常活跃的开发人员社区。他们已经在最新版本中推出了跨行事务支持(该支持仍处于beta中,当然,这里也没有嵌套事务)。