HBase 是否支持嵌套事务(或类似的东西)?
Does HBase support nested transactions (or something equivalent)?
我想 运行 测试修改数据,断言所做的更改是正确的,然后回滚更改。在典型的数据库用语中,这将被称为开始一个事务然后回滚它。
我受限MySql因为应用程序代码使用了事务,所以测试无法进一步封装应用程序在事务中的更改。
如果我切换到 HBase(我有其他考虑的原因,例如规模),我可以做这样的事情吗?这是一个不确定要做什么的情况 google-for.
首先,很少有数据库支持真正的嵌套事务。但是,MySQL 和 Postgres 都支持 SAVEPOINT
,这可用于完成您正在尝试做的事情。如果你使用的是像 rails 这样的 ORM;它应该已经能够处理这样的用例。
HBase 中的事务
Apache HBase 不支持传统意义上的事务,即它不为您提供启动和回滚的能力 operation.The HBase 提供的唯一事务保证是:
- 行级操作的原子性。
- 对 HBase 区域的任何扫描操作 运行 都会看到扫描开始时的数据状态。扫描 运行.
时,它不会看到写入该区域的新数据
我的建议是不要对 NoSQL 数据库抱有与关系数据库类似的期望。 HBase 擅长处理数十 PB 的数据,用于进行大量的点更新、点读取和范围扫描。但是,管理 HBase 集群比管理 MySQL 实例复杂得多。在迁移到 HBase 时,您需要放弃对关系数据库的许多要求。
也就是说,对于您尝试执行的操作,有一些变通方法,具体取决于您的具体设置,这些变通方法可能有效也可能无效。您可以在每次测试开始前清理整个 DB/table。
另一种处理此问题的方法是在 HBase 之上使用另一个提供 SQL 类语义的引擎。 Apache Phoenix 就是这样一个拥有非常活跃的开发者社区的项目。他们在最新版本中推出了跨行事务支持(该支持仍处于测试阶段,当然,这里也没有嵌套事务)。
我想 运行 测试修改数据,断言所做的更改是正确的,然后回滚更改。在典型的数据库用语中,这将被称为开始一个事务然后回滚它。
我受限MySql因为应用程序代码使用了事务,所以测试无法进一步封装应用程序在事务中的更改。
如果我切换到 HBase(我有其他考虑的原因,例如规模),我可以做这样的事情吗?这是一个不确定要做什么的情况 google-for.
首先,很少有数据库支持真正的嵌套事务。但是,MySQL 和 Postgres 都支持 SAVEPOINT
,这可用于完成您正在尝试做的事情。如果你使用的是像 rails 这样的 ORM;它应该已经能够处理这样的用例。
HBase 中的事务
Apache HBase 不支持传统意义上的事务,即它不为您提供启动和回滚的能力 operation.The HBase 提供的唯一事务保证是:
- 行级操作的原子性。
- 对 HBase 区域的任何扫描操作 运行 都会看到扫描开始时的数据状态。扫描 运行. 时,它不会看到写入该区域的新数据
我的建议是不要对 NoSQL 数据库抱有与关系数据库类似的期望。 HBase 擅长处理数十 PB 的数据,用于进行大量的点更新、点读取和范围扫描。但是,管理 HBase 集群比管理 MySQL 实例复杂得多。在迁移到 HBase 时,您需要放弃对关系数据库的许多要求。
也就是说,对于您尝试执行的操作,有一些变通方法,具体取决于您的具体设置,这些变通方法可能有效也可能无效。您可以在每次测试开始前清理整个 DB/table。
另一种处理此问题的方法是在 HBase 之上使用另一个提供 SQL 类语义的引擎。 Apache Phoenix 就是这样一个拥有非常活跃的开发者社区的项目。他们在最新版本中推出了跨行事务支持(该支持仍处于测试阶段,当然,这里也没有嵌套事务)。