HBase是否支持嵌套事务(或类似的事务)?

HBase是否支持嵌套事务(或类似的事务)?,hbase,Hbase,我希望运行修改数据的测试,断言所做的更改是正确的,然后回滚更改。在典型的数据库术语中,这将被称为启动事务,然后将其回滚 我受到MySql的限制,因为应用程序代码使用事务,所以测试无法进一步封装应用程序在事务中的更改 如果我切换到HBase(我有其他原因需要考虑,例如规模),我可以这样做吗?这是一个不确定用谷歌搜索什么的例子。首先,很少有数据库支持真正的嵌套事务。然而,MySQL和Postgres都支持保存点,它可以用来完成您想要做的事情。如果您使用的是类似ORM的rails;它应该已经能够处理这

我希望运行修改数据的测试,断言所做的更改是正确的,然后回滚更改。在典型的数据库术语中,这将被称为启动事务,然后将其回滚

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


如果我切换到HBase(我有其他原因需要考虑,例如规模),我可以这样做吗?这是一个不确定用谷歌搜索什么的例子。

首先,很少有数据库支持真正的嵌套事务。然而,MySQL和Postgres都支持
保存点
,它可以用来完成您想要做的事情。如果您使用的是类似ORM的rails;它应该已经能够处理这样的用例了

HBase中的交易

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

  • 行级操作的原子性
  • 在HBase区域上运行的任何扫描操作都将看到扫描开始时的数据状态。它不会看到扫描运行时写入该区域的新数据
  • 我的建议是,不要像对关系数据库那样对NoSQL数据库抱有类似的期望。HBase擅长处理数十PB的数据,用于进行大容量点更新、点读取和范围扫描。然而,管理HBase集群比管理MySQL实例要复杂得多。在迁移到HBase时,您将需要放弃对关系数据库的许多要求

    也就是说,对于您正在尝试做的事情,有一些变通方法,根据您的具体设置,这些方法可能有效,也可能无效。您可以在每个测试开始之前清理整个DB/表


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

    首先,支持真正嵌套事务的数据库很少。然而,MySQL和Postgres都支持
    保存点
    ,它可以用来完成您想要做的事情。如果您使用的是类似ORM的rails;它应该已经能够处理这样的用例了

    HBase中的交易

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

  • 行级操作的原子性
  • 在HBase区域上运行的任何扫描操作都将看到扫描开始时的数据状态。它不会看到扫描运行时写入该区域的新数据
  • 我的建议是,不要像对关系数据库那样对NoSQL数据库抱有类似的期望。HBase擅长处理数十PB的数据,用于进行大容量点更新、点读取和范围扫描。然而,管理HBase集群比管理MySQL实例要复杂得多。在迁移到HBase时,您将需要放弃对关系数据库的许多要求

    也就是说,对于您正在尝试做的事情,有一些变通方法,根据您的具体设置,这些方法可能有效,也可能无效。您可以在每个测试开始之前清理整个DB/表

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