我想运行修改数据的测试,Assert所做的更改是正确的,然后回滚更改。在典型的数据库术语中,这将被称为启动事务,然后将其回滚。我受到mysql的限制,因为应用程序代码使用事务,所以测试不能进一步封装应用程序在事务中的更改。如果我切换到hbase(我有其他原因需要考虑,例如scale),我可以这样做吗?这是一个不确定要谷歌做什么的案例。
jaxagkaj1#
首先,很少有数据库支持真正的嵌套事务。然而,mysql和postgres都支持 SAVEPOINT 可以用来完成你想做的事。如果您使用的是类似orm的rails;它应该已经能够处理这样的用例了。hbase中的事务apache hbase不支持传统意义上的事务,即它不提供启动然后回滚操作的功能。hbase提供的唯一事务保证是:行级操作的原子性。在hbase区域上运行的任何扫描操作都将看到数据的状态,与扫描开始时一样。它不会看到扫描运行时写入该区域的新数据。我的建议是不要像对关系数据库那样对nosql数据库抱有类似的期望。hbase擅长处理数十PB的数据,用于进行大容量点更新、点读取和范围扫描。然而,管理hbase集群比管理mysql示例要复杂得多。在迁移到hbase时,您将需要删除关系数据库上的许多需求。也就是说,有一些解决办法,你正在试图做什么,这可能会或不会工作的基础上,你的确切设置。您可以在每个测试开始之前清理整个db/表。处理这个问题的另一种方法是在hbase之上使用另一个引擎,它提供类似sql的语义。apachephoenix就是这样一个拥有非常活跃的开发人员社区的项目。他们在最新版本中推出了跨行事务支持(该支持仍在beta版中,当然,这里也没有嵌套事务)。
SAVEPOINT
1条答案
按热度按时间jaxagkaj1#
首先,很少有数据库支持真正的嵌套事务。然而,mysql和postgres都支持
SAVEPOINT
可以用来完成你想做的事。如果您使用的是类似orm的rails;它应该已经能够处理这样的用例了。hbase中的事务
apache hbase不支持传统意义上的事务,即它不提供启动然后回滚操作的功能。hbase提供的唯一事务保证是:
行级操作的原子性。
在hbase区域上运行的任何扫描操作都将看到数据的状态,与扫描开始时一样。它不会看到扫描运行时写入该区域的新数据。
我的建议是不要像对关系数据库那样对nosql数据库抱有类似的期望。hbase擅长处理数十PB的数据,用于进行大容量点更新、点读取和范围扫描。然而,管理hbase集群比管理mysql示例要复杂得多。在迁移到hbase时,您将需要删除关系数据库上的许多需求。
也就是说,有一些解决办法,你正在试图做什么,这可能会或不会工作的基础上,你的确切设置。您可以在每个测试开始之前清理整个db/表。
处理这个问题的另一种方法是在hbase之上使用另一个引擎,它提供类似sql的语义。apachephoenix就是这样一个拥有非常活跃的开发人员社区的项目。他们在最新版本中推出了跨行事务支持(该支持仍在beta版中,当然,这里也没有嵌套事务)。